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.
- šÆ Sobre o Projeto
- š ļø Tecnologias
- šļø Arquitetura
- š InĆcio RĆ”pido
- š¦ Instalação
- āļø Configuração
- šāāļø Executando
- š Scripts DisponĆveis
- š Monitoramento
- š§Ŗ Testes
- š Documentação da API
- š³ Docker
- š Deploy
- š¤ Contribuindo
- š LicenƧa
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
- NestJS v11 - Framework Node.js progressivo
- TypeScript v5.7 - Superset tipado do JavaScript
- Fastify v5 - Framework web de alta performance
- TypeORM v0.3 - ORM moderno e flexĆvel
- PostgreSQL - Banco principal para produção
- SQLite - Banco para desenvolvimento
- MySQL/MariaDB - Suporte opcional
- class-validator - Validação declarativa
- class-transformer - Transformação de objetos
- bcrypt - Hash de senhas
- Passport - Autenticação flexĆvel
- @nestjs/throttler - Rate limiting
- @nestjs/terminus - Health checks
- Pino - Logger de alta performance
- Docker - Containerização
- ESLint - Linting de código
- Prettier - Formatação de código
- Jest - Framework de testes
- SWC - Compilador rƔpido para TypeScript
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
- Node.js ā„ 18.0.0
- pnpm ā„ 8.0.0 (recomendado) ou npm/yarn
- Redis ā„ 6.0 (opcional, para cache)
- PostgreSQL ℠13 (para produção)
# 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)
pnpm install
npm install
yarn install
Copie e configure o arquivo de ambiente:
cp .env.example .env
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
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
# Desenvolvimento com hot-reload
pnpm dev
# Debugging
pnpm debug
# Build
pnpm build
# Produção
pnpm prod
# Subir serviƧos (Redis + PostgreSQL)
pnpm docker:up
# Parar serviƧos
pnpm docker:down
# Desenvolvimento completo
pnpm dev:setup
pnpm dev
- Modo desenvolvimento com hot-reloadpnpm debug
- Modo debugpnpm build
- Build para produçãopnpm prod
- Execução em produção
pnpm db:migration:generate <name>
- Gerar nova migrationpnpm db:migration:run
- Executar migrationspnpm db:migration:revert
- Reverter Ćŗltima migrationpnpm db:schema:sync
- Sincronizar schema (ā ļø cuidado!)
pnpm lint
- Verificar lintingpnpm format
- Formatar códigopnpm test
- Executar testespnpm test:watch
- Testes em modo watchpnpm test:cov
- Testes com cobertura
pnpm docker:up
- Subir serviƧospnpm docker:down
- Parar serviƧospnpm docker:logs
- Ver logs dos serviƧos
# 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
- Cache: Hit rate, estatĆsticas Redis
- Performance: Tempo de resposta, queries lentas
- Sistema: CPU, memória, uptime
- Tasks: Queue status, workers ativos
# 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
test/
āāā unit/ # Testes unitĆ”rios
āāā integration/ # Testes de integração
āāā e2e/ # Testes end-to-end
Acesse a documentação interativa:
http://localhost:3000/docs
Importe a collection disponĆvel em /docs/postman/
curl -X POST http://localhost:3000/api/v1/users \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "name": "John Doe"}'
curl http://localhost:3000/api/v1/users/{id}
# 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
# Build da imagem
docker build -t storagie-backend .
# Executar container
docker run -p 3000:3000 storagie-backend
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
- Heroku - Deploy direto
- AWS ECS/Fargate - Containerizado
- Google Cloud Run - Serverless
- Railway - Deploy simplificado
- DigitalOcean App Platform - PaaS
- Configurar variƔveis de ambiente
- Executar migrations do banco
- Configurar Redis/cache
- Configurar monitoramento
- Testar health checks
- Configurar logging
- Configurar backup do banco
- Fork o projeto
- Clone seu fork
- Crie uma branch (
git checkout -b feature/nova-feature
) - FaƧa suas alteraƧƵes
- Teste tudo (
pnpm test
) - Commit (
git commit -m 'feat: nova feature'
) - Push (
git push origin feature/nova-feature
) - Abra um Pull Request
- Commits: Use Conventional Commits
- Code Style: ESLint + Prettier configurados
- Testes: Mantenha cobertura > 80%
- Documentação: Atualize docs relevantes
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
Este projeto estƔ sob a licenƧa MIT. Veja o arquivo LICENSE para mais detalhes.
- Documentação: ARCHITECTURE.md | CONFIGURATION.md
- Issues: Reporte bugs ou sugira melhorias
- Discussions: Participe das discussƵes da comunidade