Skip to content

Simple REST Node.js API feita com Fastify, com cobertura de testes, CI, e publicação da imagem da aplicação no Docker hub

Notifications You must be signed in to change notification settings

rcmonteiro/find-a-friend-api

Repository files navigation

Find a Friend - API

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.

User Stories

Nesse desafio desenvolveremos uma API para a adoção de animais, a FindAFriend API, utilizando SOLID e testes.

Regras da aplicação

  • 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

Regras de negócio

  • 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

--

Como rodar o projeto

Clone o repositório

gh repo clone https://github.com/rcmonteiro/find-a-friend-api.git

Instale as dependências

pnpm i

Suba as imagens da aplicação

docker-compose build
docker-compose up -d

Configure as variáveis de ambiente

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.

Configure o prisma

pnpm prisma generate
pnpm prisma migrate dev

Rode a aplicação

pnpm start:dev

Teste as rotas

Rodar os testes unitários e e2e

pnpm run test:coverage

alt text

CI/CD

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.

Testando um push, os testes são executados no Github alt text

About

Simple REST Node.js API feita com Fastify, com cobertura de testes, CI, e publicação da imagem da aplicação no Docker hub

Topics

Resources

Stars

Watchers

Forks