Documentação técnica • Autor: Leonardo Norbiato - Equipe de Engenharia
Cliente: Aster Technology / UVA Última Atualização: 15/09/2025 Autores: Leonardo Norbiato - Equipe de Engenharia

Microservice Inventory

Microserviço de inventário — NestJS/PostgreSQL/AWS

Índice

1. OBJETIVO DO REPOSITÓRIO

Este documento consolida as informações técnicas e de arquitetura do projeto "microservice-inventory", um microsserviço desenvolvido em NestJS para gestão de fornecedores (suppliers) do ecossistema Aster/UVA. O serviço implementa operações CRUD completas, integração com mensageria via AWS SQS e persistência de dados via Prisma/PostgreSQL. O objetivo principal é fornecer uma API robusta para gerenciamento de fornecedores com validações específicas para pessoa física (PF) e pessoa jurídica (PJ), incluindo dados bancários, endereçamento e categorização.

2. ÚLTIMA REVISÃO

3. TECNOLOGIAS UTILIZADAS

Backend
Node.js, NestJS 10.0.0, TypeScript 5.4.5, Prisma 5.15.0 (ORM), PostgreSQL (banco de dados), AWS SDK SQS 3.699.0 (mensageria), Swagger/OpenAPI 7.3.1 (documentação), Class Validator/Transformer (validação), Vitest (testes), Husky (git hooks), Commitlint (padronização de commits), Faker.js (dados de teste)
Frontend
Não aplicável (API pura)
Banco de Dados
PostgreSQL (via Prisma ORM), Migrations automáticas via Prisma, Schema com enums para tipos e categorias
Ferramentas de Conexão e Infraestrutura
Docker Compose (desenvolvimento local), AWS SQS (mensageria assíncrona), Prisma Client Manager (gerenciamento de conexões), Cache Manager (NestJS)

4. FUNCIONALIDADES E DOMÍNIOS

Gestão de Fornecedores
Criação com validação de duplicatas por documento, Listagem com filtros (busca textual, categoria, status), Busca individual por ID, Atualização de dados, Exclusão lógica (soft delete), Bloqueio/desbloqueio de fornecedores
Validações Específicas
PF: RG obrigatório, data nascimento; PJ: Contribuinte obrigatório (1,2,9), inscrição estadual condicional; Validação de email, telefone, documentos; Campos obrigatórios por tipo de fornecedor
Integração com Mensageria
Eventos publicados via AWS SQS: SUPPLIER_CREATED, SUPPLIER_UPDATED, SUPPLIER_DELETED, SUPPLIER_BLOCKED, SUPPLIER_UNBLOCKED
Paginação e Ordenação
Paginação configurável (page, limit), Ordenação por múltiplos campos, Ordenação especial por cidade+estado, Contagem total de registros

5. ARQUITETURA FRONTEND

Não aplicável - API pura sem frontend próprio

6. ARQUITETURA BACKEND

Controllers
SupplierController: Endpoints REST para gestão de fornecedores - GET /suppliers (lista com filtros), GET /suppliers/:id (busca por ID), POST /suppliers (criação), PUT /suppliers/:id (atualização), DELETE /suppliers/:id (soft delete), PATCH /suppliers/toggle-block/:id (bloqueio/desbloqueio)
Use Cases
CreateSupplierUseCase (criação com validação de duplicatas), FindAllSuppliersUseCase (listagem com filtros), FindOneSupplierUseCase (busca individual), UpdateSupplierUseCase (atualização), DeleteSupplierUseCase (exclusão lógica), ToggleBlockSupplierUseCase (bloqueio/desbloqueio)
Repositories
SupplierRepository (abstract), PrismaSupplierRepository (implementação Prisma/PostgreSQL), InMemorySupplierRepository (testes)
Entities/DTOs
SupplierEntity (entidade principal), CreateSupplierDto (criação com validações PF/PJ), UpdateSupplierDto (atualização), FindAllSuppliersQuery (query parameters)
Enums
SupplierType (pf/pj), SupplierCategory (product/supplies), SupplierSortBy (campos ordenação)
Infraestrutura
SqsModule (mensageria AWS SQS), SupplierSqsPublisherService (publicação eventos), DatabaseModule (configuração Prisma), PrismaClientManager (gerenciamento conexões)

7. ROTAS E ENDPOINTS

Base URL
/suppliers (Headers obrigatórios: x-tenant-id)
GET /suppliers
Lista fornecedores com filtros - Query params: search, category, status, page, limit, orderBy, order - Response: Lista paginada de fornecedores
GET /suppliers/:id
Busca fornecedor por ID - Response: Dados completos do fornecedor
POST /suppliers
Cria novo fornecedor - Body: CreateSupplierDto - Response: 204 No Content
PUT /suppliers/:id
Atualiza fornecedor - Body: UpdateSupplierDto - Response: 204 No Content
DELETE /suppliers/:id
Remove fornecedor (soft delete) - Response: 204 No Content
PATCH /suppliers/toggle-block/:id
Bloqueia/desbloqueia fornecedor - Response: 204 No Content
Documentação Swagger
/api

8. ESTRUTURA DE DADOS, TABELAS E VIEWS

Tabela: suppliers
Campos principais: id (UUID), type (pf/pj), category (product/supplies), document (CPF/CNPJ), name, email, phone, photo
Dados pessoais/empresariais
stateRegistration (inscrição estadual), birthDate (PF), rg (PF), openingDate (PJ), taxpayer (PJ: 1,2,9)
Dados bancários
bankName, bankAgency, bankAccount, bankPix, bankIspb, bankCode, bankFullName
Endereço
cep, address, homeNumber (obrigatórios), complement (opcional), neighborhood, city, state (obrigatórios)
Controle temporal
createdAt (criação), blockedAt (bloqueio), deletedAt (exclusão lógica)

9. CONFIGURAÇÃO E VARIÁVEIS

Variáveis de Ambiente
DATABASE_URL (String de conexão PostgreSQL), SUPPLIER_CREATED_QUEUE_URL (URL da fila AWS SQS), PORT (Porta da aplicação - padrão: 3001)
Docker Compose
PostgreSQL: porta 5432, Usuário: postgres, Senha: 12345678, Database: postgres
Configurações NestJS
CORS habilitado para todas as origens, Validação global com ValidationPipe, Swagger configurado em /api, Cache global habilitado

10. TREEVIEW DA ARQUITETURA

microservice-inventory/
├── src/
│   ├── app.module.ts                 # Módulo principal da aplicação
│   ├── main.ts                       # Bootstrap da aplicação
│   ├── common/                       # Utilitários compartilhados
│   │   ├── decorators/               # Decorators customizados
│   │   │   └── class-validator/      # Validações específicas
│   │   ├── error-handling/           # Tratamento de erros
│   │   └── utils/                    # Funções utilitárias
│   ├── database/                     # Configuração do banco
│   │   ├── database.module.ts       # Módulo do banco
│   │   └── prisma-client-manager.ts  # Gerenciador Prisma
│   ├── infra/                        # Infraestrutura
│   │   └── messaging/               # Mensageria AWS SQS
│   │       ├── adapters/            # Adaptadores de eventos
│   │       ├── publisher/           # Serviços de publicação
│   │       └── messaging.module.ts  # Módulo de mensageria
│   ├── modules/                      # Módulos de negócio
│   │   └── supplier/                # Módulo de fornecedores
│   │       ├── dto/                 # Data Transfer Objects
│   │       ├── entities/            # Entidades de domínio
│   │       ├── enum/                # Enumeradores
│   │       ├── ports/               # Interfaces/contratos
│   │       ├── use-cases/           # Casos de uso
│   │       │   └── unit-tests/      # Testes unitários
│   │       ├── supplier.controller.ts # Controller REST
│   │       └── supplier.module.ts   # Módulo do fornecedor
│   └── repositories/                 # Camada de persistência
│       ├── in-memory/               # Repositório em memória
│       ├── prisma/                  # Repositório Prisma
│       └── supplier.abstract.ts     # Interface abstrata
├── prisma/                          # Configuração Prisma
│   ├── migrations/                  # Migrations do banco
│   └── schema.prisma               # Schema do banco
├── docker-compose.yml              # Ambiente de desenvolvimento
├── package.json                    # Dependências e scripts
├── tsconfig.json                   # Configuração TypeScript
└── README.md                       # Documentação do projeto

11. INTEGRAÇÕES E DEPENDÊNCIAS

Dependências principais
Node.js, NestJS, TypeScript, Prisma, PostgreSQL, AWS SDK SQS, Swagger/OpenAPI, Class Validator/Transformer, Vitest, Husky, Commitlint, Faker.js
Banco de Dados
PostgreSQL (via Prisma ORM), Migrations automáticas via Prisma
Ferramentas
Docker Compose, AWS SQS, Prisma Client Manager

12. INTEGRAÇÕES EXTERNAS

AWS SQS
Queue: SUPPLIER_CREATED_QUEUE_URL, Eventos: Criação, atualização, exclusão, bloqueio de fornecedores, Formato: JSON com tenant-id
PostgreSQL
Conexão via Prisma ORM, Migrations automáticas, Pool de conexões gerenciado

13. CONTROLE DE VERSÃO

14. SEGURANÇA E ACESSO

15. CONSIDERAÇÕES FINAIS

Este microsserviço implementa uma arquitetura limpa e bem estruturada para gestão de fornecedores, com separação clara de responsabilidades, validações robustas e integração com sistemas externos via mensageria. A documentação Swagger facilita o consumo da API e os testes garantem a qualidade do código.

Principais características:

Retornar para home