Updated the `ActionId` property to `Id` in `RecActionDto` and `RecAction` classes for consistency. Reflected this change in all relevant files, including log messages, property assignments, and database column mappings. Standardized naming conventions to improve code clarity and maintainability.
43 lines
1.6 KiB
C#
43 lines
1.6 KiB
C#
using MediatR;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.Logging;
|
|
using ReC.Application.Common.Dto;
|
|
using ReC.Application.Common.Interfaces;
|
|
using System.Text.Json;
|
|
|
|
namespace ReC.Application.Common.Behaviors;
|
|
|
|
public class HeaderQueryBehavior<TRecAction>(IRecDbContext dbContext, ILogger<HeaderQueryBehavior<TRecAction>>? logger = null) : IPipelineBehavior<TRecAction, Unit>
|
|
where TRecAction : RecActionDto
|
|
{
|
|
public async Task<Unit> Handle(TRecAction action, RequestHandlerDelegate<Unit> next, CancellationToken cancel)
|
|
{
|
|
if (action.HeaderQuery is null)
|
|
return await next(cancel);
|
|
|
|
var result = await dbContext.HeaderQueryResults.FromSqlRaw(action.HeaderQuery).SingleOrDefaultAsync(cancel);
|
|
|
|
if (result?.RawHeader is null)
|
|
{
|
|
logger?.LogWarning("Header query did not return a result or returned a null REQUEST_HEADER. Profile ID: {ProfileId}, Action ID: {Id}", action.ProfileId, action.Id);
|
|
|
|
return await next(cancel);
|
|
}
|
|
|
|
var headerDict = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(result.RawHeader);
|
|
|
|
if(headerDict is null)
|
|
{
|
|
logger?.LogWarning(
|
|
"Header JSON deserialization returned null. RawHeader: {RawHeader}, ProfileId: {ProfileId}, Id: {Id}",
|
|
result.RawHeader, action.ProfileId, action.Id);
|
|
|
|
return await next(cancel);
|
|
}
|
|
|
|
action.Headers = headerDict.ToDictionary(header => header.Key, kvp => kvp.Value.ToString());
|
|
|
|
return await next(cancel);
|
|
}
|
|
}
|