Este projeto é uma API de gerenciamento de tarefas (To-Do) usando Fastify, Prisma, TypeScript e o conceito de Clean Architecture de forma simples e organizada.
src/
├── modules/
│ └── to-do/
│ ├── dtos/
│ ├── entities/
│ ├── repositories/
│ ├── routes/
│ └── usecases/
├── shared/
│ ├── errors/
│ └── lib/
└── server.tsO projeto adota os princípios da Clean Architecture, priorizando organização, testabilidade e independência entre as camadas:
- Entidades: Regras e comportamentos de domínio.
- UseCases: Lógica de aplicação, orquestrando as regras do negócio.
- Repositórios (interfaces): Contratos de acesso a dados.
- Repositórios (implementações): Uso de Prisma para persistência.
- Rotas: Camada HTTP usando Fastify.
As camadas de regra de negócio não conhecem nada sobre infraestrutura como Prisma ou Fastify — apenas interfaces.
- Testes mais simples e independentes
- Facilita manutenção e evolução do projeto
- Troca de tecnologias sem impacto no domínio
- Node.js
- TypeScript
- Fastify
- Prisma ORM
- PostgreSQL
- Docker + Docker Compose
- Crie um arquivo
.envcom as variáveis de ambiente:
POSTGRES_USER=your_user
POSTGRES_PASSWORD=your_password
POSTGRES_DB=your_database- Execute o projeto com:
docker-compose upA aplicação estará disponível em: http://localhost:3000/api/to-do
version: "3.8"
services:
app:
image: node:22
working_dir: /app
volumes:
- .:/app
command: pnpm install && pnpm dev
ports:
- "3000:3000"
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
depends_on:
- db
db:
image: bitnami/postgresql:latest
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
ports:
- "5432:5432"- Adicionar autenticação de usuários
- Implementar testes automatizados
- Separar Controllers para melhorar organização da camada HTTP
- Centralizar e melhorar tratamento de erros
- Adicionar validações com
zod(opcional no futuro)
Este projeto serve como uma base sólida, seguindo a Clean Architecture para aplicações Node.js modernas. É modular, testável, flexível e preparado para crescer com organização e facilidade.