Giter Site home page Giter Site logo

barbaracalderon / casino-backend Goto Github PK

View Code? Open in Web Editor NEW
0.0 1.0 0.0 4.49 MB

A Python-based REST API using FastAPI and PostgreSQL for managing casino transactions and player operations. Tests with Pytest and deploy with Docker Compose.

Dockerfile 1.75% Python 98.25%
docker docker-compose dockerfile fastapi postgresql pytest python sqlachemy

casino-backend's Introduction

(Portuguese version | Click here for the English version.)

The Casino REST API

Este projeto é uma API REST que simula serviços para usuários cassinos.

Foi desenvolvido em Python usando o framework FastAPI e banco de dados PostgreSQL.

Ele inclui testes de ponta-a-ponta (e2e), testes de integração e testes unitários para garantir a robustez e a qualidade do código. Os testes foram desenvolvidos utilizando o Pytest. Além disso, este projeto utiliza Docker Compose para orquestrar dois serviços conteinirizados: casino-api (localhost:3001) e postgresql-data (localhost:5433) e senha example para acesso.

Casino API

Os objetivos desse projeto são:

  • Ter código publicado para acesso geral na plataforma Github
  • Utilizar commit patterns
  • Uso do framework FastAPI para o desenvolvimento da aplicação backend
  • Uso do Pytest para desenvolvimento de testes ponta-a-ponta, integração e unitários
  • Respostas das requisições à API devem ser no formato JSON
  • Aplicação em contêineres com uso de Docker e Docker Compose para orquestração
  • API documentada com padrão Swagger da OpenAPI (localhost:3001/docs)
  • Definição dos endpoints gerais /players, /balance, /bet, /win, /rollback e /history e suas respectivas especificidades
  • Validação de valores não-negativos
  • Validação de existência de jogador
  • Persistência de dados com banco de dados relacional PostgreSQL
  • Estruturação e legibilidade de código: estrutura desenvolvida com models, schemas, routes, services, repositories e exceptions

Autor

Barbara Calderon, desenvolvedora de software.

índice

  1. Tecnologias utilizadas
  2. Estrutura do Projeto
  3. Executar localmente com Docker Compose
  4. Executar testes com Pytest
  5. Endpoints da aplicação Casino API

Tecnologias utilizadas

  • Linguagem: Python
  • Framework: FastAPI
  • Banco de dados: PostgreSQL
  • Gerenciamento: Poetry
  • Dependências principais:
    • Pydantic: Utilizado para a validação e serialização de dados.
    • Psycopg-binary: Driver para comunicação com o banco de dados PostgreSQL.
    • SQLAlchemy: ORM (Object-Relational Mapping) para interagir com o banco de dados de maneira mais intuitiva.
    • Asyncpg: Driver assíncrono para PostgreSQL, utilizado para operações de banco de dados assíncronas.
    • Pytest: Framework de testes utilizado para escrever e executar testes.

Estrutura do Projeto

O projeto está conteinerizado em dois serviços principais:

  • casino-api: contém o aplicativo FastAPI (app/) e os testes (tests/).
  • postgresql-data: contém os dados persistidos no banco de dados PostgreSQL.

Dockerfile

O diretório casino-api possui um Dockerfile para criar a imagem Docker do aplicativo.

Docker Compose

O projeto utiliza o docker-compose.yml para orquestrar os contêineres casino-api e postgresql-data.

Dependências

O projeto foi desenvolvido utilizando o poetry, que gerencia as dependências e também o pytest para os testes.

Executar localmente com Docker Compose

Para rodar o projeto localmente, siga os passos abaixo:

  1. Tenha o Docker e o Docker Compose instalados na sua máquina.

  2. Clone o repositório:

git clone [email protected]:barbaracalderon/casino-backend.git
  1. Navege até o diretório do projeto:
cd casino-backend/
  1. Execute o Docker Compose para subir os contêineres:
docker compose up --build

Caso encontre problemas com o comando acima, talvez seja necessário usar sudo docker compose up --build

  1. No navegador, o serviço casino-api está disponível no endereço:
localhost:3001
  1. Para acessar a documentação Swagger da OpenAPI:
localhost:3001/docs
  1. Para acessar o banco de dados no Pg4Admin (caso queira, mas não é necessário), as credenciais são:
banco de dados = 'casino'
senha = 'example'
localhost:5433

Executando testes com Pytest

  1. Para executar testes, navegue até o diretório:
cd casino-backend/casino-api
  1. Execute o comando de teste:
docker exec -it casino-api pytest

São 48 testes com sucesso.

Testes with Pytest

Endpoints da aplicação

Método HTTP Endpoint Descrição
POST /players Cria um novo jogador.
GET /players Retorna a lista de jogadores.
GET /players/{player_id} Retorna os detalhes de um jogador específico.
DELETE /players/{player_id} Deleta um jogador específico.
PUT /players/{player_id} Atualiza as informações de um jogador específico.
GET /players/{player_id}/history Retorna o histórico de transações de um jogador específico.
GET /balance Retorna o saldo de um jogador específico.
POST /transactions/bet Cria uma nova aposta.
GET /transactions Retorna a lista de transações.
GET /transactions/{txn_uuid} Retorna os detalhes de uma transação específica.
DELETE /transactions/{transaction_id} Deleta uma transação específica.
POST /transactions/win Registra um ganho para um balance.
POST /transactions/rollback Realiza o rollback de uma transação.

Considerações finais

O projeto desenvolvido utilizando FastAPI, PostgreSQL, Poetry, Pytest e Docker representa uma solução para gerenciar transações e jogadores em um ambiente de cassino virtual. A escolha do FastAPI permitiu o desenvolvimento de uma API que aproveita os recursos do Python moderno. O PostgreSQL foi utilizado para persistência de dados, garantindo integridade e confiabilidade nas operações de banco de dados.

O uso do Poetry simplificou a gestão de dependências, oferecendo um ambiente de desenvolvimento consistente e facilitando a manutenção do projeto. A implementação de testes de unidade, integração e ponta-a-ponta com o Pytest assegurou que a aplicação funcionasse conforme o esperado em diferentes cenários.

A estrutura organizada em models, exceptions, routes, services, repositories e schemas visa proporcionar um código limpo, modular e de fácil manutenção. Além disso, a containerização com Docker e a orquestração via Docker Compose possibilita a portabilidade, facilitando a implantação em diferentes ambientes.

Em resumo, este projeto lidou com construção de API REST com gestão de dependências e banco de dados, implementação de testes e buscou uma organização estrutural com legibilidade de código.

Cordialmente,

Barbara Calderon.

casino-backend's People

Contributors

barbaracalderon avatar

Watchers

 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.