Skip to main content

Documento de Requisitos — Criar tabela para armazenar histórico

Tarefa: #196018 Contexto: Sequência de implementação #1


Visão Geral

Criar a tabela CartRecommendationsHistory no banco DbCoreOrg para servir como repositório central do histórico de eventos de upsell, correlacionados por RecommendationsId.

Papéis Envolvidos

PapelResponsabilidade
Desenvolvedor Back-endCriar Model, Mapping, Migration e schema da tabela

Requisitos Funcionais

RF-01 — Estrutura da tabela CartRecommendationsHistory

História de Usuário: Como desenvolvedor, quero uma tabela para persistir os eventos do fluxo de upsell para que possam ser consultados e correlacionados posteriormente.

Critérios de Aceitação:

  1. WHEN a migration for aplicada THEN o sistema SHALL criar a tabela CartRecommendationsHistory no DbCoreOrg
  2. WHEN a migration for revertida (down) THEN o sistema SHALL remover a tabela
  3. WHEN um registro for inserido THEN o sistema SHALL persistir todas as colunas do schema

Model e Mapping:

  • Localização: Core.OrgDB/Entities/CartRecommendationsHistoryModel.cs e Core.OrgDB/Data/Mappings/CartRecommendationsHistoryMapping.cs
  • Deve herdar de BaseEntity e implementar IAggregateRoot

Schema:

ColunaTipoNullDescrição
Idint PK IDENTITYNOT NULLHerdado de BaseEntity
DateCreatedDateTimeNOT NULLHerdado de BaseEntity
DateDeletedDateTime?NULLHerdado de BaseEntity
DateUpdatedDateTime?NULLHerdado de BaseEntity
RecommendationsIduniqueidentifierNOT NULLUUID gerado pelo BFF; correlaciona todos os eventos de uma mesma venda
EventTypenvarchar(100)NOT NULLTipo de evento que gerou o registro
CartIdintNULLId do carrinho/zzlink. Nulo no evento RecommendationRequested
CustomerIdintNOT NULLId do cliente
CodeStorestringNOT NULLCódigo da loja
UrlstringNULLEndpoint da integração externa chamada, se houver
RequestjsonNULLPayload usado na integração
ResponsejsonNULLPayload retornado pela integração
StatusCodeint?NULLHTTP Status Code retornado pela integração externa
DurationMslong?NULLTempo total do request em milissegundos
MessagestringNULLObservação opcional

Eventos (escopo desta entrega):

EventoDescrição
RecommendationRequestedRequisição de recomendação recebida pelo BFF
RecommendationCartCreatedCarrinho criado a partir de recomendação
RecommendationProductAddedToOrderProduto recomendado adicionado ao pedido
RecommendationProductRemovedToOrderProduto recomendado removido do pedido

Casos de Borda:

  • CartId é nulo apenas para RecommendationRequested — o cart ainda não foi criado neste momento
  • StatusCode, Url e DurationMs são nulos para eventos sem chamada a integração externa
  • Colunas de BaseEntity mantidas no schema por padrão; DateDeleted e DateUpdated não são populadas por se tratar de tabela append-only

RF-02 — Indexação

Critérios de Aceitação:

  1. WHEN a migration for aplicada THEN o sistema SHALL criar índice em RecommendationsId
  2. WHEN a migration for aplicada THEN o sistema SHALL criar índice em CartId

RF-03 — Criação do Model e Mapping

Critérios de Aceitação:

  1. WHEN o Model for criado THEN o sistema SHALL herdar de BaseEntity com construtor vazio para EF
  2. WHEN o Model for criado THEN o sistema SHALL implementar IAggregateRoot
  3. WHEN o Mapping for criado THEN o sistema SHALL registrar a tabela como CartRecommendationsHistory

Fora de Escopo

  • Indexação em CustomerId, EventType, DateCreated ou outros campos
  • Limpeza/expurgo de dados antigos
  • Constraints de FK para CartId
  • Evento RecommendationPDPViewed (será tratado em entrega futura)

Dependências

DependênciaDescriçãoStatus
DbCoreOrgBanco de dados existenteDisponível
Coezzion.Common NuGetBaseEntity, IAggregateRootDisponível