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
- O método sempre usado é
LogQueueMessageEvent.SaveLogOrderHistoryMessage(...). - A chamada é sempre fire-and-forget:
_ = logQueueService.EnqueueAsync(...). - Não há distinção de método para nível informativo vs erro — a diferença está apenas no texto da mensagem.
- O
GetInfoQueryHandlernão injetaILogQueueServiceatualmente — será necessário adicioná-lo ao construtor. - O
schemaestá disponível via_userProvider.GetSchemaName()(já injetado). - O
paymentIdrelevante no contexto deGetInfoStoreAsyncé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:
- Adicionar
ILogQueueService logQueueServiceao construtor. - Declarar campo
private readonly ILogQueueService _logQueueService;. - Usar
_ = _logQueueService.EnqueueAsync(...)no ponto de expiração.