API REST assíncrona de gestão de competição de crossfit — atletas, categorias e centros de treinamento. Construída com FastAPI + SQLAlchemy async + PostgreSQL, com migrations versionadas (Alembic), paginação, query params de busca e tratamento de exceções de integridade.
Projeto originalmente proposto pela Digital Innovation One e estendido com filtros, paginação, customização de respostas e uma suíte de testes com CI.
A API foi desenvolvida utilizando o fastapi (async), junto das seguintes libs: alembic, SQLAlchemy, pydantic. Para salvar os dados está sendo utilizando o postgres, por meio do docker.
Para executar o projeto, utilizei a pyenv, com a versão 3.11.4 do python para o ambiente virtual.
Caso opte por usar pyenv, após instalar, execute:
pyenv virtualenv 3.11.4 workoutapi
pyenv activate workoutapi
pip install -r requirements.txtPara subir o banco de dados, caso não tenha o docker-compose instalado, faça a instalação e logo em seguida, execute:
make run-dockerPara criar uma migration nova, execute:
make create-migrations d="nome_da_migration"Para criar o banco de dados, execute:
make run-migrationsPara subir a API, execute:
make rune acesse: http://127.0.0.1:8000/docs
- adicionar query parameters nos endpoints
- atleta
- nome
- cpf
- customizar response de retorno de endpoints
- get all
- atleta
- nome
- centro_treinamento
- categoria
- Manipular exceção de integridade dos dados em cada módulo/tabela
- sqlalchemy.exc.IntegrityError e devolver a seguinte mensagem: “Já existe um atleta cadastrado com o cpf: x”
- status_code: 303
- Adicionar paginação utilizando a lib: fastapi-pagination
- limit e offset
Os testes de schema validam o contrato dos modelos Pydantic (tamanho de campo, valores positivos, campos obrigatórios e proibição de campos extras) sem precisar de banco — rápidos e determinísticos. Rodam automaticamente no CI a cada push.
pip install -r requirements-dev.txt
pytestFastAPI: https://fastapi.tiangolo.com/
Pydantic: https://docs.pydantic.dev/latest/
SQLAlchemy: https://docs.sqlalchemy.org/en/20/
Alembic: https://alembic.sqlalchemy.org/en/latest/
Fastapi-pagination: https://uriyyo-fastapi-pagination.netlify.app/
