Skip to content

Covlant/nest-clean-api

Repository files navigation

Nest Clean API

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.

last-commit top-language languages-count

📑 Índice

📖 Visão Geral

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.

🛠️ Tecnologias Utilizadas

  • 🟢 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.

⚙️ Funcionalidades

  • 🔐 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.

🚀 Como Executar o Projeto

📋 Pré-requisitos

🔧 Instalação

  1. Clone o repositório:

    git clone https://github.com/joschonarth/nest-clean-api.git
  2. Acesse o diretório do projeto:

    cd nest-clean-api
  3. Instale as dependências:

    pnpm install

▶️ Execução

  1. Crie um arquivo .env a partir do exemplo:

    cp .env.example .env

    Edite o arquivo .env para configurar as variáveis de ambiente necessárias.

  2. Inicie os bancos de dados PostgreSQL e Redis utilizando o Docker:

    docker-compose up -d
  3. Execute as migrações do banco de dados:

    npx prisma migrate dev
  4. Inicie a API:

    pnpm run start:dev

    A aplicação estará disponível em http://localhost:3333.

📌 Tabela de Endpoints

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

🧪 Testes

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

Contribuições são muito bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. 🚀

⭐ Apoie este Projeto

Se você gostou da aplicação, deixe uma ⭐ no repositório!

📞 Contato

LinkedIn Gmail

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors