Code Monkey home page Code Monkey logo

cassino's Introduction

Cassino

Aplicação que simula um sistema de cassino utilizando SpringBoot e React

Utilização

  1. Executar o SQL do banco
  2. Instalar dependências (Backend e Frontend)
  3. Inicializar API Spring
  4. Inicializar o frontend

Backend

O backend do sistema consiste em uma API responsável por se comunicar com o banco de dados e fazer o controle do consumo dos dados.

Para utilizar devidamente desse sistema, é necessário fazer a instalação do banco de dados PostgreSQL Após isso é necessário executar o arquivo schema.sql, que está dentro da pasta resources, no software de gerenciamento de banco de dados de sua preferência para que o banco seja inicializado.

Depois basta iniciar a aplicação utilizando o SpringBoot.

A aplicação será inicializada na porta 8080 padrão

Controllers e Rotas

Os controllers consistem em entidades que recebem um repository para fazer a persistência de dados e rotas que indicam qual operação o usuário deseja fazer.

Você pode ter acesso as rotas da api apartir do link a baixo:

Run In Postman

Usuario:

@RestController
@RequestMapping("user")
public class UserController {

  @Autowired
  IUserRepository repository;

  @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> cadastrar(@RequestBody UserDTO entity) {
    repository.save(UserMapper.toBO(entity));
    UserBO user = repository.findByNome(entity.getNome());
    return ResponseEntity.ok(user);
  }

  @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> buscarTodos() {
    List<UserBO> users = repository.findAll();
    return ResponseEntity.ok(users);
  }

  @DeleteMapping(produces = MediaType.APPLICATION_JSON_VALUE, path = "/{id}")
  public ResponseEntity<Object> deletar(@PathVariable(value = "id") Long id) {
    repository.deleteById(id);
    return ResponseEntity.ok("Usuário deletado");
  }
}

Ficha

@RestController
@RequestMapping("ficha")
public class FichaController {
  @Autowired
  IContaRepository repository;

  @PutMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> comprar(@RequestBody ComprarFicha entity) {
    ContaDTO conta = ContaMapper.toDTO(repository.getReferenceById(entity.getIdConta()));
    conta.adicionarFicha(entity.getQuantidade());
    ContaDTO response = ContaMapper.toDTO(repository.save(ContaMapper.toBO(conta)));

    return ResponseEntity.ok(response);
  }
}

Jogo

@RestController
@RequestMapping("jogo")
public class JogoController {
  @Autowired
  IJogoRepository repository;

  @Autowired
  ICartaRepository cartaRepository;

  @Autowired
  IUserRepository userRepository;

  @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> registrar(@RequestBody RegistrarJogo entity) {
    UserDTO usuario = UserMapper.toDTO(userRepository.findById(entity.getIdUsuario()).get());
    CartaDTO carta = CartaMapper.toDTO(cartaRepository.findById(entity.getIdCarta()).get());
    
    if (carta.getTipo()) {
      usuario.getConta().ganhouDinheiro(carta.getValor());
      usuario.getConta().subtrairFicha();
    } else {
      usuario.getConta().perdeuDinheiro(carta.getValor());
      usuario.getConta().subtrairFicha();
    }

    userRepository.save(UserMapper.toBO(usuario));

    return ResponseEntity.ok(repository.save(new JogoBO(null, UserMapper.toBO(usuario), CartaMapper.toBO(carta))));
  }

  @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> buscarTodos() {
    List<JogoBO> users = repository.findAll();
    return ResponseEntity.ok(users);
  }
}

Carta

@RestController
@RequestMapping("carta")
public class CartaController {
  @Autowired
  ICartaRepository repository;

  @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> cadastrar(@RequestBody CartaDTO entity) {
    return ResponseEntity.ok(repository.save(CartaMapper.toBO(entity)));
  }

  @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
  public ResponseEntity<Object> buscarTodos() {
    List<CartaBO> cartas = repository.findAll();
    return ResponseEntity.ok(cartas);
  }
}

Frontend

O frontend do sistema consiste em uma aplicação React feita com Vite

Para inicilizar é necessário rodar yarn install ou npm install para instalar todos os pacotes necessários, em seguida yarn dev para executar a aplicação em mode de desenvolvimento.

O frontend utiliza da biblioteca axios para chamados ao backend, portanto é necessário que os dois serviços estejam rodando simultaneamente

O frontend da aplicação roda na porta 5173

cassino's People

Contributors

euperinotti avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.