O API Urban Shaves está sendo desenvolvida com framework Nestjs para integração entre os apps Urban Shaves web e Urban Shaves mobile. Possui fluxo de autenticação JWT, utilizamos como ORM o Prisma, para documentação o Swagger, o PostgresQl como banco de dados.
# Instalação das dependências
$ yarn
# Iniciar container com postgres e migration
$ yarn up:db
# Para remover o container com o postgres
$ yarn rm:db
# development
$ yarn start
# watch mode
$ yarn start:dev
Para tornar uma rota pública basta adicionar o decorator @IsPublicRoute() como no exemplo abaixo:
@Controller('users')
export class UsersController {
constructor(private readonly usersService: UsersService) {}
@IsPublicRoute()
@Post()
createUser() {...}
}
http://localhost:3000/api/login
http://localhost:3000/api/users
http://localhost:3000/api/appointments
http://localhost:3000/api/providers
yarn prisma studio
Utilizamos o jest para realizar testes de integração. Eles simulam melhor o ambiente real para testar os casos de uso. Para isso criamos o arquivo .env.test com um database test.
#url de teste
DATABASE_URL="postgresql://dbase:dbase@localhost:5432/test?schema=public"
Ao digitar o comando yarn up:db
, ocoorem os sguintes passos:
- Criação do container com o banco de dados postgres com docker-compose
- Criação da tabela de desenvolvimento e execução migration de desenvolvimento.
- Criação da tabela test com e execução da migration de teste
Para execução dos testes de integração:
yarn test:watch -- nome_do_arquivo_de_teste
Com isso os testes são realizados em um database de próprio de teste. O banco de teste é resetado no inicio do teste ao final de cada teste.
afterAll(async () => {
const deleteAppointments = prisma.appointments.deleteMany();
const deleteUsers = prisma.user.deleteMany();
await prisma.$transaction([deleteAppointments, deleteUsers]);
await prisma.$disconnect();
});
Existem muitas vantagens na utilização do Nestjs para criação de APIs pelo fato dele respeitar os principios do SOLID. Desta forma é mais facil ecalar o projeto e o trabalho em grupo pelo fato deste framework usar uma aquitetura padronizada.
Thiago Pacheco de Andrade
👋 Meus contatos!
Veja o arquivo MIT license.