API de um fórum de perguntas e respostas, construído com NestJS e seguindo os princípios de Clean Architecture.
Esta aplicação é o back-end para uma plataforma de fórum, similar ao Stack Overflow. Usuários podem se registrar, criar perguntas, respondê-las, comentar em perguntas e respostas, e muito mais. O sistema é desenhado para ser escalável e manutenível, utilizando uma arquitetura limpa para separar as preocupações e facilitar o desenvolvimento e testes.
- Framework: NestJS
- Linguagem: TypeScript
- ORM: Prisma
- Banco de Dados: PostgreSQL (utilizado com Prisma)
- Autenticação: JWT (JSON Web Tokens)
- Testes: Vitest
- Cache: Redis
- Upload de Arquivos: Suporte para upload de arquivos (ex: R2 Storage)
- Linting: ESLint
- Validação: Zod
O projeto segue os princípios da Clean Architecture, separando o código em quatro camadas principais:
src/core: Contém a lógica de negócio mais genérica e os blocos de construção do domínio (Entidades, Value Objects, Use Cases, etc.).src/domain: Contém a lógica de negócio específica da aplicação, dividida por contextos (ex:forum,notification).src/infra: Contém os detalhes de implementação, como controladores HTTP, módulos do NestJS, acesso ao banco de dados, etc.test: Contém os testes da aplicação, incluindo testes unitários e end-to-end.
A seguir, a lista de rotas disponíveis na API:
POST /sessions: Autentica um usuário e retorna umaccess_token.POST /accounts: Cria uma nova conta de usuário.
POST /questions: Cria uma nova pergunta.GET /questions: Lista as perguntas mais recentes.GET /questions/:slug: Busca uma pergunta pelo seu slug.PUT /questions/:id: Edita uma pergunta.DELETE /questions/:id: Deleta uma pergunta.
POST /questions/:questionId/answers: Adiciona uma resposta a uma pergunta.GET /questions/:questionId/answers: Lista as respostas de uma pergunta.PUT /answers/:id: Edita uma resposta.DELETE /answers/:id: Deleta uma resposta.PATCH /answers/:answerId/choose-as-best: Marca uma resposta como a melhor.
POST /questions/:questionId/comments: Adiciona um comentário a uma pergunta.GET /questions/:questionId/comments: Lista os comentários de uma pergunta.DELETE /questions/comments/:id: Deleta um comentário de uma pergunta.POST /answers/:answerId/comments: Adiciona um comentário a uma resposta.GET /answers/:answerId/comments: Lista os comentários de uma resposta.DELETE /answers/comments/:id: Deleta um comentário de uma resposta.
POST /attachments: Faz o upload de um anexo.
PATCH /notifications/:notificationId/read: Marca uma notificação como lida.
Siga as instruções abaixo para configurar e executar o projeto em seu ambiente local.
-
Clone o repositório:
git clone https://github.com/rocketseat-education/05-nest-clean cd 05-nest-clean -
Instale as dependências:
pnpm install
-
Configure o ambiente:
- Renomeie o arquivo
.env.examplepara.env. - Preencha as variáveis de ambiente no arquivo
.envcom as suas configurações (banco de dados, chaves de segurança, etc.).
- Renomeie o arquivo
-
Inicie o banco de dados com Docker:
docker-compose up -d
-
Execute as migrações do Prisma:
pnpm prisma migrate dev
-
Modo de desenvolvimento:
pnpm start:dev
A aplicação estará disponível em
http://localhost:3333. -
Modo de produção:
pnpm build pnpm start:prod
-
Testes unitários
pnpm test -
Testes end-to-end (e2e):
pnpm test:e2e