Projeto Node.js com Fastify e Zod, para praticar a Clean Architecture, utilizando os 5 princípios SOLID, na implementação dos casos de uso, repositórios e controllers da aplicação. Também seguindo o TDD na criação de toda a aplicação, iniciando pelos testes unitários, para percorrer os ciclos RED>GREEN>REFACTOR até finalizar a implementação de todos os casos de uso, repositórios de testes, e controllers da aplicação.
Nesse desafio desenvolveremos uma API para a adoção de animais, a FindAFriend API, utilizando SOLID e testes.
- Deve ser possível cadastrar um pet
- Deve ser possível listar todos os pets disponíveis para adoção em uma cidade
- Deve ser possível filtrar pets por suas características
- Deve ser possível visualizar detalhes de um pet para adoção
- Deve ser possível se cadastrar como uma ORG
- Deve ser possível realizar login como uma ORG
- Para listar os pets, obrigatoriamente precisamos informar a cidade
- Uma ORG precisa ter um endereço e um número de WhatsApp
- Um pet deve estar ligado a uma ORG
- O usuário que quer adotar, entrará em contato com a ORG via WhatsApp
- Todos os filtros, além da cidade, são opcionais
- Para uma ORG acessar a aplicação como admin, ela precisa estar logada
--
gh repo clone https://github.com/rcmonteiro/find-a-friend-api.git
pnpm i
docker-compose build
docker-compose up -d
cp .env.sample .env
cp .env.sample .env.docker
Edite o arquivo .env.docker
para apontar o postgress para o host definido em nosso docker-compose:
DATABASE_URL="postgresql://docker:docker@localhost:5432/find-a-friend-pg?schema=public"
Estamos com dois arquivos de variáveis de ambiente, um para rodar localmente, assim podemos rodar os testes apontando para o banco de dados em localhost, mas no docker, precisamos apontar pelo container_name, que é como funciona o ambiente de redes nas imagens do docker.
pnpm prisma generate
pnpm prisma migrate dev
pnpm start:dev
- Swagger http://localhost:3001/docs/static/index.html
- Teste as rotas com httpie:
./api.http
pnpm run test:coverage
O projeto também conta com um workflow do GIT para sempre rodar os testes unitários para todo push em qualquer branch, e rodar a atualização com tag dinâmica da aplicação no Docker Hub, para todo pull request na branch master.