Sistema completo de gestão para adegas e estabelecimentos vinícolas. API REST desenvolvida com arquitetura limpa (Clean Architecture), oferecendo funcionalidades completas de autenticação, gerenciamento de produtos, categorias, pedidos e relatórios de vendas.
A NecPay API é uma solução robusta para gestão completa de adegas, oferecendo:
- Autenticação segura com AWS Cognito
- Gestão completa de produtos com controle de estoque
- Sistema de categorização para organização de produtos
- Processamento de pedidos com cálculos automáticos
- Relatórios de vendas por período
- Arquitetura serverless escalável e moderna
- Node.js 22 - Runtime JavaScript
- TypeScript - Tipagem estática
- Serverless Framework v4 - Deploy e gerenciamento AWS
- AWS Lambda - Computação serverless
- API Gateway - Roteamento HTTP
- AWS Cognito - Autenticação e autorização
- AWS S3 - Armazenamento de imagens de produtos
- PostgreSQL (Neon) - Banco de dados principal
- Drizzle ORM - Object-Relational Mapping
- Migrations automáticas - Controle de versão do schema
- Clean Architecture - Separação clara de responsabilidades
- Dependency Injection - Container DI customizado
- React Email - Templates de email responsivos
- Zod - Validação de dados
- ESLint + TypeScript - Qualidade e padronização de código
- Clone o repositório:
git clone <url-do-repo> cd adegaTech-api
- Instale as dependências:
pnpm install
- Configure as variáveis de ambiente:
Crie um arquivo
.env
com as variáveis abaixo (veja seção de variáveis). - Rode localmente:
serverless dev
O deploy é feito via Serverless Framework para AWS Lambda:
serverless deploy
Configure as seguintes variáveis no .env
:
DATABASE_URL
– URL de conexão do PostgreSQLCOGNITO_CLIENT_ID
– Client ID do CognitoCOGNITO_POOL_ID
– Pool ID do CognitoCOGNITO_CLIENT_SECRET
– Client Secret do Cognito
src/
├── application/ # Camada de Aplicação
│ ├── controllers/ # Controllers HTTP (Auth, Product, Category, Order, Reports)
│ ├── usecases/ # Casos de uso de negócio
│ ├── entities/ # Entidades de domínio
│ ├── errors/ # Tratamento de erros customizados
│ ├── query/ # Objetos de consulta/filtros
│ └── services/ # Serviços de domínio
├── infra/ # Camada de Infraestrutura
│ ├── database/ # Repositórios e schema Drizzle
│ ├── clients/ # Clientes AWS (Cognito, S3)
│ └── emails/ # Templates React Email
├── main/ # Camada Principal
│ └── functions/ # Handlers AWS Lambda
├── kernel/ # Núcleo do Framework
│ └── di/ # Container de Injeção de Dependência
└── shared/ # Utilitários Compartilhados
sls/ # Configurações Serverless Framework
- Application: Regras de negócio e casos de uso
- Infrastructure: Implementações técnicas (banco, APIs externas)
- Main: Pontos de entrada (Lambda handlers)
- Kernel: Framework customizado (DI, decorators)
Método | Endpoint | Descrição | Auth |
---|---|---|---|
POST | /auth/sign-up |
Cadastro de proprietário e adega | ❌ |
POST | /auth/sign-in |
Login do usuário | ❌ |
POST | /auth/refresh-token |
Renovar token de acesso | ❌ |
POST | /auth/forgot-password |
Solicitar recuperação de senha | ❌ |
POST | /auth/forgot-password/confirm |
Confirmar nova senha | ❌ |
Método | Endpoint | Descrição | Auth |
---|---|---|---|
POST | /product |
Criar novo produto | ✅ |
GET | /products |
Listar produtos (com filtros) | ✅ |
GET | /products/{productId} |
Obter produto por ID | ✅ |
PUT | /product/{productId} |
Atualizar produto | ✅ |
DELETE | /product/{productId} |
Deletar produto | ✅ |
Método | Endpoint | Descrição | Auth |
---|---|---|---|
POST | /category |
Criar nova categoria | ✅ |
GET | /category |
Listar categorias | ✅ |
GET | /category/{categoryId} |
Obter categoria por ID | ✅ |
PUT | /category/{categoryId} |
Atualizar categoria | ✅ |
DELETE | /category/{categoryId} |
Deletar categoria | ✅ |
Método | Endpoint | Descrição | Auth |
---|---|---|---|
POST | /orders |
Processar novo pedido | ✅ |
Método | Endpoint | Descrição | Auth |
---|---|---|---|
GET | /report/sales |
Relatórios de vendas por período | ✅ |
- Account - Conta do proprietário (id, name, email, externalId, createdAt, updatedAt)
- Store - Estabelecimento/adega (id, name, email, phone, accountId, createdAt)
- Product - Produtos (id, name, description, price, stock, categoryId, imageUrl, storeId)
- Category - Categorias de produtos (id, name, description, storeId)
- Order - Pedidos (id, totalAmount, paymentMethod, storeId, createdAt)
- OrderItem - Itens do pedido (id, orderId, productId, quantity, unitPrice, totalPrice)
- StockMovement - Movimentações de estoque (id, productId, type, quantity, reason)
- Cadastro de proprietários com criação automática da adega
- Login seguro com JWT tokens
- Recuperação de senha via email
- Refresh tokens para renovação automática
- Triggers Cognito customizados para templates de email
- CRUD completo de produtos
- Upload de imagens para AWS S3
- Controle de estoque automático
- Filtros avançados de busca
- Categorização de produtos
- Organização hierárquica de produtos
- CRUD completo de categorias
- Filtros por categoria
- Criação de pedidos com múltiplos itens
- Cálculo automático de totais
- Controle automático de estoque
- Validação de disponibilidade
- Histórico de movimentações
- Relatórios de vendas por período
- Cálculo de ticket médio
- Métricas de performance
- Análise temporal de vendas
- Templates React Email responsivos
- Envio via AWS SES
- Emails de recuperação de senha
- Triggers automáticos do Cognito
pnpm install # Instalar dependências
serverless dev # Servidor local de desenvolvimento
pnpm dev:email # Dev server para templates de email
pnpm db:generate # Gerar migrações Drizzle
pnpm db:push # Aplicar migrações no banco
pnpm typecheck # Checagem de tipos TypeScript
serverless deploy # Deploy para AWS
- ✅ Sistema completo de autenticação
- ✅ CRUD de produtos com upload de imagens
- ✅ Sistema de categorias
- ✅ Processamento de pedidos
- ✅ Controle de estoque
- ✅ Relatórios de vendas
- ✅ Templates de email
- ✅ Clean Architecture implementada
- ✅ Dependency Injection
- ✅ Validações com Zod
- ✅ Cognito Triggers customizados
- 🔄 Sistema de funcionários/employees
- 🔄 Relatórios avançados
- 🔄 Dashboard analytics
- Separação clara de responsabilidades
- Baixo acoplamento entre camadas
- Testabilidade e manutenibilidade
- Container DI customizado
- Decorators
@Injectable()
- Resolução automática de dependências
- Escalabilidade automática
- Pay-per-use
- Zero gerenciamento de servidor
- TypeScript em todo o codebase
- Validação runtime com Zod
- Schemas tipados do banco com Drizzle
ISC
Para dúvidas, sugestões ou suporte técnico, entre em contato através dos canais oficiais da NecPay.