Uma API RESTful desenvolvida com arquitetura limpa, modular e escalável para gerenciamento de tópicos, posts e usuários em um fórum, garantindo interações ágeis e seguras entre os participantes.
- 📖 Visão Geral
- 🛠️ Tecnologias Utilizadas
- ⚙️ Funcionalidades
- 🚀 Como Executar o Projeto
- 📌 Tabela de Endpoints
Este projeto é uma API RESTful robusta e altamente modular para gerenciar tópicos, posts e usuários em um fórum. Construída utilizando NestJS e baseada nos princípios da Clean Architecture, a aplicação promove uma divisão clara de responsabilidades entre suas camadas, garantindo alta coesão e baixo acoplamento.
A arquitetura foi pensada para ser escalável, segura e extensível, incorporando práticas de Desenvolvimento Orientado a Testes (TDD) e aplicando rigorosamente os princípios do SOLID. Além disso, a utilização de Padrões de Projeto estratégicos proporciona soluções elegantes para problemas recorrentes de software, elevando a qualidade, a manutenibilidade e a performance do sistema.
O projeto também integra tecnologias modernas como Prisma ORM, PostgreSQL, Redis e armazenamento em nuvem via S3/R2, proporcionando alta eficiência no gerenciamento de dados e arquivos.
- 🟢 Node.js: Plataforma para execução do JavaScript no servidor.
- 🔧 NestJS: Framework para construir aplicações Node.js eficientes e escaláveis.
- 🟦 TypeScript: Superset de JavaScript que adiciona tipagem estática.
- 🗄️ Prisma: ORM moderno e robusto para banco de dados.
- 🐳 Docker: Containerização da aplicação.
- 🗃️ PostgreSQL: Banco de dados relacional utilizado para armazenar informações.
- 🔒 Bcrypt: Biblioteca para hash de senhas de forma segura.
- 📅 DayJS: Biblioteca para manipulação de datas e horas.
- 🔴 Redis: Sistema de cache em memória e armazenamento de dados temporários.
- 🔐 Passport-JWT: Middleware de autenticação baseado em JWT.
- 🏗️ Reflect-Metadata: Biblioteca que adiciona suporte a metadados em TypeScript.
- ⚡ RxJS: Biblioteca para programação reativa com observables.
- 🧪 Zod: Biblioteca para validação de dados.
- ☁️ S3 da AWS via R2 da Cloudflare: Armazenamento de arquivos na nuvem.
- 🧩 Faker: Biblioteca para gerar dados falsos para testes.
- 📦 Multer: Middleware para upload de arquivos.
- ⚙️ Dotenv: Carrega variáveis de ambiente.
- 🛠️ ESLint: Linter para garantir a qualidade do código.
- 🧪 Supertest: Framework de testes para APIs HTTP.
- ⚙️ Vitest: Framework de testes para TypeScript e JavaScript.
- 🔐 Autenticação segura de usuários: Registro, login e proteção de rotas privadas com tokens JWT.
- 📝 Criação e gestão de tópicos e posts: Usuários podem criar, editar e excluir seus próprios tópicos e posts.
- 💬 Sistema de comentários: Comentários podem ser adicionados tanto a tópicos quanto a respostas.
- 🏆 Escolha da melhor resposta: O autor de um tópico pode marcar uma resposta como a melhor solução.
- 🔍 Busca eficiente e listagem de tópicos: Permite consultar tópicos recentes, respostas e comentários.
- 🗑️ Gerenciamento de conteúdo: Permite a exclusão de posts, comentários e respostas específicas.
- ☁️ Upload de arquivos: Integração com serviços de armazenamento na nuvem para envio de arquivos.
- ⚡ Cache otimizado: Uso de Redis para acelerar a recuperação de informações e reduzir a carga no banco de dados.
- 🧪 Testes automatizados: Cobertura abrangente com testes de unidade e integração.
- 🛠️ Estrutura escalável: Facilitada por princípios de Clean Architecture e SOLID para crescimento sustentável do sistema.
-
Clone o repositório:
git clone https://github.com/joschonarth/nest-clean-api.git
-
Acesse o diretório do projeto:
cd nest-clean-api -
Instale as dependências:
pnpm install
-
Crie um arquivo
.enva partir do exemplo:cp .env.example .env
Edite o arquivo
.envpara configurar as variáveis de ambiente necessárias. -
Inicie os bancos de dados PostgreSQL e Redis utilizando o Docker:
docker-compose up -d
-
Execute as migrações do banco de dados:
npx prisma migrate dev
-
Inicie a API:
pnpm run start:dev
A aplicação estará disponível em http://localhost:3333.
| Método | Rota | Descrição |
|---|---|---|
| POST | /accounts |
Criar uma nova conta de usuário |
| POST | /sessions |
Autenticar usuário (login) |
| POST | /questions |
Criar uma nova pergunta |
| POST | /questions/:questionId/answers |
Responder uma pergunta |
| POST | /questions/:questionId/comments |
Comentar em uma pergunta |
| POST | /answers/:answerId/comments |
Comentar em uma resposta |
| PATCH | /answers/:answerId/choose-as-best |
Escolher melhor resposta para uma pergunta |
| PUT | /answers/:id |
Editar uma resposta |
| PUT | /questions/:id |
Editar uma pergunta |
| DELETE | /questions/:id |
Deletar uma pergunta |
| DELETE | /questions/comments/:id |
Deletar um comentário de pergunta |
| DELETE | /answers/:id |
Deletar uma resposta |
| DELETE | /answers/comments/:id |
Deletar um comentário de resposta |
| GET | /questions |
Listar perguntas recentes |
| GET | /questions/:questionId/answers |
Listar respostas de uma pergunta |
| GET | /questions/:questionId/comments |
Listar comentários de uma pergunta |
| GET | /answers/:answerId/comments |
Listar comentários de uma resposta |
Este projeto inclui testes unitários e testes E2E (end-to-end) para garantir a confiabilidade e o funcionamento correto dos recursos implementados. Para executar os testes, utilize os seguintes comandos:
-
Executar testes unitários:
npm run test -
Executar testes unitários em modo de observação:
npm run test:watch
-
Preparar o ambiente do Prisma antes dos testes E2E:
npm run pretest:e2e
-
Executar testes E2E:
npm run test:e2e
-
Executar testes E2E em modo de observação:
npm run test:e2e:watch
-
Executar testes com cobertura:
npm run test:coverage
-
Executar a interface do usuário do Vitest:
npm run test:ui
Contribuições são muito bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. 🚀
Se você gostou da aplicação, deixe uma ⭐ no repositório!