Pular para o conteúdo principal

Integração com GrocersCore

Visão Geral

O sistema de integração se comunica com o GrocersCore (monolito principal) através de endpoints REST específicos. Esta comunicação é assíncrona, utilizando Azure Service Bus para processamento em background.

Arquitetura

sequenceDiagram
participant Client
participant Integration
participant ServiceBus
participant Background
participant GrocersCore

Client->>Integration: POST /batch/{entity}
Integration->>ServiceBus: Envia mensagem
Integration->>Client: 200 OK (operationId)
ServiceBus->>Background: Processa mensagem
Background->>GrocersCore: Envia para endpoint específico
GrocersCore->>Background: Resposta
Background->>ServiceBus: Envia notificação
ServiceBus->>Client: Webhook notification

Endpoints do GrocersCore

Todos os endpoints são prefixados com a URL base configurada em AppSettings:ExternalEndpoint:MonoService:BaseUrl.

Produtos

  • POST /v1/products/integration: Criar produtos
  • PUT /v1/products/integration: Atualizar produtos
  • DELETE /v1/products/integration: Deletar produtos

Categorias

  • POST /v1/categories/integration: Criar categorias
  • DELETE /v1/categories/integration: Deletar categorias

Marcas

  • POST /v1/brands/integration: Criar marcas
  • DELETE /v1/brands/integration: Deletar marcas

SKUs

  • POST /v1/skus/integration: Criar SKUs
  • PUT /v1/skus/integration: Atualizar SKUs
  • DELETE /v1/skus/integration: Deletar SKUs

Armazéns

  • POST /v1/warehouses/integration: Criar armazéns
  • PUT /v1/warehouses/integration: Atualizar armazéns
  • DELETE /v1/warehouses/integration: Deletar armazéns

SKUs em Armazéns

  • POST /v1/gateway/warehouses/sku/integration: Criar relação SKU-armazém
  • PUT /v1/gateway/warehouses/sku/integration: Atualizar relação SKU-armazém
  • DELETE /v1/gateway/warehouses/sku/integration: Deletar relação SKU-armazém

Preços

  • POST /v1/gateway/pricing/integration: Criar preços
  • DELETE /v1/gateway/pricing/integration: Deletar preços

Pedidos

  • POST /v1/gateway/orders/integration: Atualizar pedidos

Autenticação

A comunicação com o GrocersCore requer:

  1. Header de Conta
    • x-contractAccountId: ID da conta do contrato
    • Exemplo: x-contractAccountId: 9f36a666-acd5-4987-a47f-3de247f65d82

Processamento de Erros

O sistema implementa uma estratégia robusta de tratamento de erros:

  1. Erros 4xx

    • Considerados erros de negócio
    • Mensagem marcada como processada
    • Erro enviado via webhook
  2. Erros 5xx

    • Considerados erros de infraestrutura
    • Mensagem retorna para a fila
    • Retry automático

Exemplo de Notificação de Erro

{
"operationId": "54d6a979-5f62-4e17-9d4c-dbd9f5ede403",
"relatedEntity": "Product",
"eventType": 1,
"data": {
"externalReference": "123",
"name": "Produto Teste"
},
"error": {
"statusCode": 400,
"message": "Product with external reference 123 already exists"
},
"contractAccountId": "9f36a666-acd5-4987-a47f-3de247f65d82"
}

Boas Práticas

  1. Monitoramento

    • Implementar health checks
    • Monitorar tempos de resposta
    • Acompanhar taxa de erros
  2. Resiliência

    • Implementar circuit breaker
    • Configurar timeouts adequados
    • Tratar erros específicos
  3. Performance

    • Limitar tamanho dos payloads
    • Monitorar uso de recursos
    • Otimizar número de conexões
  4. Segurança

    • Validar todos os inputs
    • Usar HTTPS
    • Implementar rate limiting