Skip to main content

Pesquisa — Padrão de uso do ILogQueueService na Checkout API

Data: 2026-05-14
Contexto: Task #193232 — Ajuste endpoint GET api/payment/v2/{id} (GetInfo)
Objetivo: Entender como enviar logs para a fila AllLogs a partir de um handler de query no checkout.


Conclusões principais

  1. O método sempre usado é LogQueueMessageEvent.SaveLogOrderHistoryMessage(...).
  2. A chamada é sempre fire-and-forget: _ = logQueueService.EnqueueAsync(...).
  3. Não há distinção de método para nível informativo vs erro — a diferença está apenas no texto da mensagem.
  4. O GetInfoQueryHandler não injeta ILogQueueService atualmente — será necessário adicioná-lo ao construtor.
  5. O schema está disponível via _userProvider.GetSchemaName() (já injetado).
  6. O paymentId relevante no contexto de GetInfoStoreAsync é order.Id.

Assinaturas disponíveis em LogQueueMessageEvent

Arquivo: coezzion-service-checkout/src/Checkout.Domain/Events/LogQueueMessageEvent.cs

// Linha 19 — Mais comum: schema + paymentId + descrição
SaveLogOrderHistoryMessage(string schema, int paymentId, string description)

// Linha 47 — Com nome do método
SaveLogOrderHistoryMessage(string schema, int paymentId, string description, string method)

// Linha 60 — Com código de retorno do provider
SaveLogOrderHistoryMessage(string schema, int paymentId, string description, string method, string providerReturnCode)

// Linha 74 — Múltiplas descrições
SaveLogOrderHistoryMessage(string schema, int paymentId, List<string> descriptions, string method)

// Linha 87 — Exception com CallerMemberName automático
SaveLogOrderHistoryMessage(string schema, int paymentId, Exception exception, [CallerMemberName] string method = "")

// Linha 31 — Para interceptors HTTP (com url, request, response)
SaveLogOrderHistoryMessage(string schema, int paymentId, string description, string url, string request, string response, string method)

Exemplos de uso encontrados

FinishPaymentService.cs — log informativo simples:

_ = logQueueService.EnqueueAsync(
LogQueueMessageEvent.SaveLogOrderHistoryMessage(
schema,
finishPayment.PaymentId,
"Quarta tentativa do pedido, vai remover da fila de processamento."));

FinishOrderCommandHandler.cs — log informativo com interpolação:

_ = logQueueService.EnqueueAsync(LogQueueMessageEvent.SaveLogOrderHistoryMessage(
userProvider.GetSchemaName(),
paymentId,
$"O cliente {cart.Customer.FullName} finalizou o pagamento, mas consta na lista de bloqueados para esta loja!"));

FinishPaymentService.cs — log com nome do método:

_ = logQueueService.EnqueueAsync(LogQueueMessageEvent.SaveLogOrderHistoryMessage(
schema,
finishPayment.PaymentId,
$"Loja {cart.StoreId} usa gateway {paymentInfo.Gateway.GetDescription()}.",
nameof(CreateTransaction)));

Estado atual do GetInfoQueryHandler

Arquivo: coezzion-service-checkout/src/Checkout.API/Application/Messages/Queries/OrderQuery/Payment/GetInfoQueryHandler.cs

Construtor atual (linha 27–39)

public GetInfoQueryHandler(
IEcommerceDataService ecommerceDataService,
IPaymentSqlRepository paymentSqlRepository,
ICoreSqlRepository coreSqlRepository,
INPSReasonsRepository npsReasonsRepository,
IUserProvider userProvider)

Como obter schema e paymentId no handler

// schema
_userProvider.GetSchemaName()

// paymentId — disponível como order.Id, onde order é o parâmetro de GetInfoStoreAsync
// order.Id é passado para GetPaymentInfoAsync e identifica o pagamento

Primeiras linhas de GetInfoStoreAsync (linha 107–121)

private async Task<GetInfoBase> GetInfoStoreAsync(OrderTypeDTO order)
{
var paymentTask = _paymentSqlRepository.GetPaymentInfoAsync(order.Id);
var cartTask = _coreSqlRepository.GetCartInfoAsync(order.CartId);

await Task.WhenAll(paymentTask, cartTask);

var payment = await paymentTask;
var cart = await cartTask;

if (payment is null || cart is null) return null;

var customLink = await _coreSqlRepository.GetCustomLinkAsync(cart.StoreMainBrandId);

if (customLink is null) return null;

Chamada correta para o log de expiração de itens recomendados

Com base nos padrões encontrados, a chamada no GetInfoStoreAsync deverá ser:

_ = logQueueService.EnqueueAsync(
LogQueueMessageEvent.SaveLogOrderHistoryMessage(
_userProvider.GetSchemaName(),
order.Id,
$"Itens recomendados não retornados para CartId {cart.Id}: janela de 1 hora expirada."));

Mudanças necessárias no handler:

  1. Adicionar ILogQueueService logQueueService ao construtor.
  2. Declarar campo private readonly ILogQueueService _logQueueService;.
  3. Usar _ = _logQueueService.EnqueueAsync(...) no ponto de expiração.