API para uma plataforma voltada a professores e alunos, onde professores podem publicar postagens visíveis para alunos e demais professores. O projeto foi desenvolvido utilizando as seguintes tecnologias em destaque:
- NestJS: Framework para construir aplicações Node.js escaláveis e eficientes;
- Express: Framework para construir aplicações web e APIs em Node.js;
- TypeScript: Superconjunto de JavaScript que adiciona tipagem estática opcional;
- JWT (JSON Web Token): Padrão para criar tokens de acesso usados na autenticação;
- bcryptjs: Biblioteca para hashing seguro de senhas;
- TypeORM: ORM para interagir com bancos de dados de forma orientada a objetos;
- pg: Cliente PostgreSQL para Node.js;
- Swagger: Ferramenta para documentar APIs RESTful;
- Zod: Biblioteca de validação de esquemas para TypeScript;
- Jest: Framework de testes em JavaScript;
- Supertest: Biblioteca para testar APIs HTTP;
Esta aplicação foi transformada em um container contendo a aplicação em si e o PostgreSQL. Antes de iniciar a aplicação, é preciso criar um arquivo .env
conforme sugestão em .env.example
, ou conforme sugestão abaixo, que inclui a parametrização utilizada no docker compose:
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
POSTGRES_USER=docker
POSTGRES_PASSWORD=docker
POSTGRES_DB=challenge
JWT_SECRET=mysecret
$ npm install
Para iniciar a aplicação, basta executar:
$ docker compose up
Após inicialização, a aplicação estará recebendo requisições na porta 3000.
Caso queira executar a aplicação apenas, os seguintes passos devem ser seguidos:
- Criar arquivo
.env
seguindo o exemplo de.env.example
Se desejar, pode utilizar o docker compose também. Sugerimos o uso do container docker db pois na inicialização ele já implementa o script init.sql
que cria as tabelas necessárias para a aplicação e adiciona alguns registros de exemplo.
$ docker compose up db
$ npm install
# development
$ npm run start
# watch mode
$ npm run start:dev
Para rodar os testes unitários, testes end to end e cobertura de testes, basta rodar os respectivos comandos:
# unit tests
$ npm run test
# e2e tests
$ npm run test:e2e
# test coverage
$ npm run test:cov
Documentação completa no Notion
http://localhost:3000/swagger-ui#/