- Cria README.md na raiz com visão global e diagrama de arquitetura - Adiciona/atualiza README.md em todos os componentes: - backend (API Go) - backoffice (NestJS) - marketplace (React/Vite) - saveinmed-bff (Python/FastAPI) - saveinmed-frontend (Next.js) - website (Fresh/Deno) - Atualiza .gitignore em todos os componentes com regras abrangentes - Cria .gitignore na raiz do projeto - Renomeia pastas para melhor organização: - backend-go → backend - backend-nest → backoffice - marketplace-front → marketplace - Documenta arquitetura, tecnologias, setup e fluxo de desenvolvimento
240 lines
5.5 KiB
Markdown
240 lines
5.5 KiB
Markdown
# SaveInMed Backoffice
|
|
|
|
Sistema de gestão administrativa (backoffice) do SaveInMed, desenvolvido com NestJS e Fastify.
|
|
|
|
## 🎯 Propósito
|
|
|
|
O Backoffice é a interface de administração e gestão do SaveInMed, fornecendo ferramentas para:
|
|
- Gerenciamento de usuários e autenticação
|
|
- Controle de inventário e estoque
|
|
- Administração de empresas cadastradas
|
|
- Processamento de webhooks de pagamento
|
|
- Relatórios e analytics
|
|
|
|
## 🚀 Tecnologias
|
|
|
|
- **NestJS 10** - Framework backend progressivo para Node.js
|
|
- **Fastify 4** - Web framework de alta performance
|
|
- **Prisma 5** - ORM moderno para TypeScript
|
|
- **PostgreSQL** - Banco de dados relacional
|
|
- **JWT** - Autenticação via JSON Web Tokens
|
|
- **Bcrypt** - Hash seguro de senhas
|
|
- **Swagger** - Documentação automática da API
|
|
|
|
## 📋 Funcionalidades
|
|
|
|
### Autenticação e Autorização
|
|
- Login com JWT (access + refresh tokens)
|
|
- Proteção de rotas com guards
|
|
- Estratégias de autenticação Passport
|
|
- Refresh token rotation
|
|
|
|
### Gestão de Usuários
|
|
- CRUD completo de usuários
|
|
- Perfis e permissões
|
|
- Validação de dados com class-validator
|
|
|
|
### Inventário
|
|
- Controle de produtos e estoque
|
|
- Registro de compras
|
|
- Movimentação de produtos
|
|
- Relatórios de inventário
|
|
|
|
### Webhooks
|
|
- Processamento de notificações do Mercado Pago
|
|
- Atualização automática de status de pedidos
|
|
- Logs de eventos
|
|
|
|
## 🏗️ Arquitetura
|
|
|
|
```
|
|
backoffice/
|
|
├── prisma/
|
|
│ └── schema.prisma # Schema do banco de dados
|
|
├── src/
|
|
│ ├── auth/ # Módulo de autenticação
|
|
│ │ ├── guards/ # Guards JWT e Refresh Token
|
|
│ │ ├── strategies/ # Estratégias Passport
|
|
│ │ └── dto/ # DTOs de login
|
|
│ ├── users/ # Módulo de usuários
|
|
│ │ ├── users.controller.ts
|
|
│ │ ├── users.service.ts
|
|
│ │ └── dto/
|
|
│ ├── inventory/ # Módulo de inventário
|
|
│ │ ├── inventory.controller.ts
|
|
│ │ ├── inventory.service.ts
|
|
│ │ └── dto/
|
|
│ ├── webhooks/ # Módulo de webhooks
|
|
│ │ ├── webhooks.controller.ts
|
|
│ │ └── webhooks.module.ts
|
|
│ ├── common/ # Recursos compartilhados
|
|
│ │ └── guards/
|
|
│ ├── prisma/ # Módulo Prisma
|
|
│ │ ├── prisma.module.ts
|
|
│ │ └── prisma.service.ts
|
|
│ ├── app.module.ts # Módulo raiz
|
|
│ └── main.ts # Entry point
|
|
├── Dockerfile
|
|
├── nest-cli.json
|
|
├── package.json
|
|
└── README.md
|
|
```
|
|
|
|
## 🔧 Configuração
|
|
|
|
### Variáveis de Ambiente
|
|
|
|
Crie um arquivo `.env` na raiz do projeto:
|
|
|
|
```bash
|
|
# Database
|
|
DATABASE_URL="postgresql://user:password@localhost:5432/saveinmed?schema=public"
|
|
|
|
# JWT
|
|
JWT_SECRET="your-secret-key-here"
|
|
JWT_REFRESH_SECRET="your-refresh-secret-key-here"
|
|
JWT_EXPIRES_IN="15m"
|
|
JWT_REFRESH_EXPIRES_IN="7d"
|
|
|
|
# Server
|
|
PORT=3000
|
|
NODE_ENV=development
|
|
```
|
|
|
|
### Pré-requisitos
|
|
|
|
- Node.js 20+
|
|
- pnpm 8+ (gerenciador de pacotes)
|
|
- PostgreSQL 14+
|
|
|
|
## 🏃 Execução Local
|
|
|
|
```bash
|
|
# Instalar dependências
|
|
pnpm install
|
|
|
|
# Gerar Prisma Client
|
|
pnpm prisma:generate
|
|
|
|
# Executar migrations
|
|
pnpm prisma migrate dev
|
|
|
|
# Modo desenvolvimento
|
|
pnpm start:dev
|
|
|
|
# Modo debug
|
|
pnpm start:debug
|
|
|
|
# API estará disponível em http://localhost:3000
|
|
# Swagger UI em http://localhost:3000/api
|
|
```
|
|
|
|
## 🏗️ Build e Produção
|
|
|
|
```bash
|
|
# Build
|
|
pnpm build
|
|
|
|
# Executar em produção
|
|
pnpm start
|
|
|
|
# Ou com PM2
|
|
pm2 start dist/main.js --name saveinmed-backoffice
|
|
```
|
|
|
|
## 🐳 Docker
|
|
|
|
```bash
|
|
# Build da imagem
|
|
docker build -t saveinmed-backoffice:latest .
|
|
|
|
# Executar container
|
|
docker run -p 3000:3000 \
|
|
-e DATABASE_URL="postgresql://..." \
|
|
-e JWT_SECRET="..." \
|
|
saveinmed-backoffice:latest
|
|
```
|
|
|
|
## 📚 Documentação da API
|
|
|
|
A documentação completa da API está disponível via Swagger UI:
|
|
|
|
```
|
|
http://localhost:3000/api
|
|
```
|
|
|
|
### Principais Endpoints
|
|
|
|
#### Autenticação
|
|
- `POST /auth/login` - Login de usuário
|
|
- `POST /auth/refresh` - Renovar access token
|
|
- `GET /auth/me` - Obter usuário autenticado
|
|
|
|
#### Usuários
|
|
- `GET /users` - Listar usuários
|
|
- `POST /users` - Criar usuário
|
|
- `GET /users/:id` - Obter usuário por ID
|
|
- `PATCH /users/:id` - Atualizar usuário
|
|
- `DELETE /users/:id` - Deletar usuário
|
|
|
|
#### Inventário
|
|
- `GET /inventory` - Listar itens do inventário
|
|
- `POST /inventory/purchase` - Registrar compra
|
|
- `GET /inventory/:id` - Obter item por ID
|
|
|
|
#### Webhooks
|
|
- `POST /webhooks/mercadopago` - Webhook do Mercado Pago
|
|
|
|
## 🗄️ Prisma
|
|
|
|
### Migrations
|
|
|
|
```bash
|
|
# Criar nova migration
|
|
pnpm prisma migrate dev --name nome_da_migration
|
|
|
|
# Aplicar migrations em produção
|
|
pnpm prisma migrate deploy
|
|
|
|
# Resetar banco de dados (desenvolvimento)
|
|
pnpm prisma migrate reset
|
|
```
|
|
|
|
### Prisma Studio
|
|
|
|
```bash
|
|
# Abrir interface visual do banco de dados
|
|
pnpm prisma studio
|
|
```
|
|
|
|
## 🧪 Testes
|
|
|
|
```bash
|
|
# Testes unitários
|
|
pnpm test
|
|
|
|
# Testes e2e
|
|
pnpm test:e2e
|
|
|
|
# Coverage
|
|
pnpm test:cov
|
|
```
|
|
|
|
## 🔒 Segurança
|
|
|
|
- Senhas hasheadas com bcrypt (salt rounds: 10)
|
|
- JWT com expiração curta (15 minutos)
|
|
- Refresh tokens com rotação automática
|
|
- Validação de entrada com class-validator
|
|
- Guards para proteção de rotas
|
|
- CORS configurado adequadamente
|
|
|
|
## 🔗 Integração com Outros Componentes
|
|
|
|
- **Backend (Go API)**: Compartilha o mesmo banco de dados PostgreSQL
|
|
- **SaveInMed Frontend**: Consome esta API para operações administrativas
|
|
- **Mercado Pago**: Recebe webhooks de notificação de pagamento
|
|
|
|
## 📝 Licença
|
|
|
|
MIT
|