Skip to content

gilstack/nestjs-ddd

Repository files navigation

šŸš€ Storagie Backend

Uma API REST robusta e escalƔvel construƭda com NestJS, TypeScript e Clean Architecture, implementando padrƵes Domain Driven Design (DDD) para mƔxima flexibilidade e manutenibilidade.

šŸ“‹ ƍndice

šŸŽÆ Sobre o Projeto

O Storagie Backend é uma solução completa de backend que oferece:

  • šŸ—ļø Arquitetura Limpa com separação clara de responsabilidades
  • šŸš€ Performance otimizada com cache Redis e processamento assĆ­ncrono
  • šŸ›”ļø SeguranƧa robusta com JWT, rate limiting e validação
  • šŸ“Š Monitoramento avanƧado com mĆ©tricas em tempo real
  • šŸ”„ Sistema de tasks para processamento assĆ­ncrono
  • šŸ—„ļø Suporte multi-banco (PostgreSQL, MySQL, SQLite)
  • šŸ“ˆ Escalabilidade horizontal preparada para microserviƧos

šŸ› ļø Tecnologias

Core Framework

  • NestJS v11 - Framework Node.js progressivo
  • TypeScript v5.7 - Superset tipado do JavaScript
  • Fastify v5 - Framework web de alta performance

Banco de Dados & ORM

Cache & Performance

  • Redis - Cache em memória e sessƵes
  • IORedis - Cliente Redis otimizado

Segurança & Validação

Monitoramento & Logs

DevOps & Qualidade

  • Docker - Containerização
  • ESLint - Linting de código
  • Prettier - Formatação de código
  • Jest - Framework de testes
  • SWC - Compilador rĆ”pido para TypeScript

šŸ—ļø Arquitetura

Este projeto implementa Clean Architecture com Domain Driven Design:

src/
ā”œā”€ā”€ domain/           # šŸ›ļø Regras de negócio puras
ā”œā”€ā”€ application/      # šŸŽÆ Casos de uso e orquestração
ā”œā”€ā”€ infrastructure/   # šŸ”§ Detalhes tĆ©cnicos
ā”œā”€ā”€ presentation/     # 🌐 Interface com mundo externo
└── shared/          # šŸ”„ Recursos compartilhados

BenefĆ­cios:

  • āœ… Testabilidade - FĆ”cil criação de mocks e testes unitĆ”rios
  • āœ… Manutenibilidade - Código organizado e desacoplado
  • āœ… Flexibilidade - FĆ”cil troca de tecnologias
  • āœ… Escalabilidade - Estrutura preparada para crescimento

šŸ“– Documentação detalhada: ARCHITECTURE.md

šŸš€ InĆ­cio RĆ”pido

PrƩ-requisitos

  • Node.js ≄ 18.0.0
  • pnpm ≄ 8.0.0 (recomendado) ou npm/yarn
  • Redis ≄ 6.0 (opcional, para cache)
  • PostgreSQL ≄ 13 (para produção)

⚔ Quick Start

# 1ļøāƒ£ Clone o repositório
git clone <repository-url>
cd storagie/source/backend

# 2ļøāƒ£ Instale as dependĆŖncias
pnpm install

# 3ļøāƒ£ Configure o ambiente
cp .env.example .env
# Edite o .env conforme necessƔrio

# 4ļøāƒ£ Inicie os serviƧos (opcional)
pnpm docker:up

# 5ļøāƒ£ Execute em modo desenvolvimento
pnpm dev

# 6ļøāƒ£ Acesse a aplicação
# API: http://localhost:3000
# Health: http://localhost:3000/health
# Docs: http://localhost:3000/docs (se habilitado)

šŸ“¦ Instalação

Usando pnpm (Recomendado)

pnpm install

Usando npm

npm install

Usando yarn

yarn install

āš™ļø Configuração

1. VariƔveis de Ambiente

Copie e configure o arquivo de ambiente:

cp .env.example .env

2. ConfiguraƧƵes Essenciais

Para Desenvolvimento:

APP_ENV=development
APP_PORT=3000
DB_TYPE=sqlite
DB_DATABASE=./storage/database.sqlite
CACHE_ENABLED=true

Para Produção:

APP_ENV=production
APP_PORT=3000
DB_TYPE=postgres
DB_HOST=your-db-host
DB_DATABASE=storagie
# Configure secrets obrigatórios!
COOKIE_SECRET=your-secure-cookie-secret
JWT_SECRET=your-secure-jwt-secret

šŸ“– Configuração completa: CONFIGURATION.md

3. Banco de Dados

SQLite (Desenvolvimento):

# JĆ” configurado no .env.example
# Banco Ć© criado automaticamente

PostgreSQL (Produção):

# Configure as variƔveis no .env
DB_TYPE=postgres
DB_HOST=localhost
DB_PORT=5432
DB_USERNAME=storagie_user
DB_PASSWORD=your-password
DB_DATABASE=storagie

šŸƒā€ā™‚ļø Executando

Desenvolvimento

# Desenvolvimento com hot-reload
pnpm dev

# Debugging
pnpm debug

Produção

# Build
pnpm build

# Produção
pnpm prod

Com Docker

# Subir serviƧos (Redis + PostgreSQL)
pnpm docker:up

# Parar serviƧos
pnpm docker:down

# Desenvolvimento completo
pnpm dev:setup

šŸ” Scripts DisponĆ­veis

Desenvolvimento

  • pnpm dev - Modo desenvolvimento com hot-reload
  • pnpm debug - Modo debug
  • pnpm build - Build para produção
  • pnpm prod - Execução em produção

Banco de Dados

  • pnpm db:migration:generate <name> - Gerar nova migration
  • pnpm db:migration:run - Executar migrations
  • pnpm db:migration:revert - Reverter Ćŗltima migration
  • pnpm db:schema:sync - Sincronizar schema (āš ļø cuidado!)

Qualidade de Código

  • pnpm lint - Verificar linting
  • pnpm format - Formatar código
  • pnpm test - Executar testes
  • pnpm test:watch - Testes em modo watch
  • pnpm test:cov - Testes com cobertura

Docker

  • pnpm docker:up - Subir serviƧos
  • pnpm docker:down - Parar serviƧos
  • pnpm docker:logs - Ver logs dos serviƧos

šŸ“Š Monitoramento

Health Checks

# Health geral
GET /health

# Liveness probe
GET /health/live

# Readiness probe
GET /health/ready

# MƩtricas completas
GET /health/metrics

# Cache status
GET /health/cache

# Performance stats
GET /health/performance

MƩtricas Disponƭveis

  • Cache: Hit rate, estatĆ­sticas Redis
  • Performance: Tempo de resposta, queries lentas
  • Sistema: CPU, memória, uptime
  • Tasks: Queue status, workers ativos

🧪 Testes

Executar Testes

# Todos os testes
pnpm test

# Testes unitƔrios
pnpm test:unit

# Testes e2e
pnpm test:e2e

# Cobertura
pnpm test:cov

# Watch mode
pnpm test:watch

Estrutura de Testes

test/
ā”œā”€ā”€ unit/           # Testes unitĆ”rios
ā”œā”€ā”€ integration/    # Testes de integração
└── e2e/           # Testes end-to-end

šŸ“š Documentação da API

Swagger/OpenAPI

Acesse a documentação interativa:

http://localhost:3000/docs

Postman Collection

Importe a collection disponĆ­vel em /docs/postman/

Exemplos de Uso

Criar UsuƔrio

curl -X POST http://localhost:3000/api/v1/users \
  -H "Content-Type: application/json" \
  -d '{"email": "[email protected]", "name": "John Doe"}'

Buscar UsuƔrio

curl http://localhost:3000/api/v1/users/{id}

🐳 Docker

Docker Compose (Desenvolvimento)

# docker-compose.yml incluĆ­do
services:
  - postgres
  - redis
  - adminer (opcional)
# Subir todos os serviƧos
docker-compose up -d

# Apenas banco e cache
docker-compose up -d postgres redis

Dockerfile (Produção)

# Build da imagem
docker build -t storagie-backend .

# Executar container
docker run -p 3000:3000 storagie-backend

šŸš€ Deploy

VariÔveis Obrigatórias em Produção

APP_ENV=production
COOKIE_SECRET=your-secure-secret
JWT_SECRET=your-secure-secret
JWT_REFRESH_SECRET=your-secure-secret
DB_HOST=your-production-db
DB_PASSWORD=your-secure-password
REDIS_HOST=your-redis-host

Plataformas Suportadas

  • Heroku - Deploy direto
  • AWS ECS/Fargate - Containerizado
  • Google Cloud Run - Serverless
  • Railway - Deploy simplificado
  • DigitalOcean App Platform - PaaS

Checklist de Deploy

  • Configurar variĆ”veis de ambiente
  • Executar migrations do banco
  • Configurar Redis/cache
  • Configurar monitoramento
  • Testar health checks
  • Configurar logging
  • Configurar backup do banco

šŸ¤ Contribuindo

Workflow

  1. Fork o projeto
  2. Clone seu fork
  3. Crie uma branch (git checkout -b feature/nova-feature)
  4. FaƧa suas alteraƧƵes
  5. Teste tudo (pnpm test)
  6. Commit (git commit -m 'feat: nova feature')
  7. Push (git push origin feature/nova-feature)
  8. Abra um Pull Request

PadrƵes

  • Commits: Use Conventional Commits
  • Code Style: ESLint + Prettier configurados
  • Testes: Mantenha cobertura > 80%
  • Documentação: Atualize docs relevantes

Estrutura de Commits

feat: nova funcionalidade
fix: correção de bug
docs: atualização de documentação
style: formatação de código
refactor: refatoração
test: adição de testes
chore: tarefas de manutenção

šŸ“„ LicenƧa

Este projeto estƔ sob a licenƧa MIT. Veja o arquivo LICENSE para mais detalhes.


šŸ†˜ Suporte


Feito com ā¤ļø usando NestJS, TypeScript e Clean Architecture

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published