From bb2dd4d63bd7f0a2b6a1594a37be84d859d319d6 Mon Sep 17 00:00:00 2001 From: TekH Date: Fri, 17 Apr 2026 00:23:36 +0200 Subject: [PATCH] Stricter error handling in BodyQuery and HeaderQuery behaviors Throw DataIntegrityException when body or header queries return null, no result, or invalid JSON. Remove ILogger and related logging from HeaderQueryBehavior for simplification. This change ensures data integrity issues are surfaced immediately. --- .../Behaviors/Action/BodyQueryBehavior.cs | 6 ++++- .../Behaviors/Action/HeaderQueryBehavior.cs | 22 ++++++------------- 2 files changed, 12 insertions(+), 16 deletions(-) diff --git a/src/ReC.Application/Common/Behaviors/Action/BodyQueryBehavior.cs b/src/ReC.Application/Common/Behaviors/Action/BodyQueryBehavior.cs index 26b27cc..f739ff0 100644 --- a/src/ReC.Application/Common/Behaviors/Action/BodyQueryBehavior.cs +++ b/src/ReC.Application/Common/Behaviors/Action/BodyQueryBehavior.cs @@ -1,6 +1,7 @@ using MediatR; using Microsoft.EntityFrameworkCore; using ReC.Application.Common.Dto; +using ReC.Application.Common.Exceptions; using ReC.Application.Common.Interfaces; namespace ReC.Application.Common.Behaviors.Action; @@ -31,7 +32,10 @@ public class BodyQueryBehavior(IRecDbContext dbContext) : I try { var scalar = await command.ExecuteScalarAsync(cancel); - action.Body = scalar as string; + + action.Body = scalar as string + ?? throw new DataIntegrityException( + $"Body query returned no result or a null value. ActionId: {action.Id}, ProfileId: {action.ProfileId}"); } finally { diff --git a/src/ReC.Application/Common/Behaviors/Action/HeaderQueryBehavior.cs b/src/ReC.Application/Common/Behaviors/Action/HeaderQueryBehavior.cs index 1a2ec24..1ff5d57 100644 --- a/src/ReC.Application/Common/Behaviors/Action/HeaderQueryBehavior.cs +++ b/src/ReC.Application/Common/Behaviors/Action/HeaderQueryBehavior.cs @@ -1,13 +1,13 @@ using MediatR; using Microsoft.EntityFrameworkCore; -using Microsoft.Extensions.Logging; using ReC.Application.Common.Dto; +using ReC.Application.Common.Exceptions; using ReC.Application.Common.Interfaces; using System.Text.Json; namespace ReC.Application.Common.Behaviors.Action; -public class HeaderQueryBehavior(IRecDbContext dbContext, ILogger>? logger = null) : IPipelineBehavior +public class HeaderQueryBehavior(IRecDbContext dbContext) : IPipelineBehavior where TRequest : notnull where TResponse : IEnumerable { @@ -35,20 +35,12 @@ public class HeaderQueryBehavior(IRecDbContext dbContext, I var scalar = await command.ExecuteScalarAsync(cancel); if (scalar is not string rawHeader) - { - logger?.LogWarning("Header query did not return a result or returned a null value. Profile ID: {ProfileId}, Action ID: {Id}", action.ProfileId, action.Id); - return; - } + throw new DataIntegrityException( + $"Header query returned no result or a null value. ActionId: {action.Id}, ProfileId: {action.ProfileId}"); - var headerDict = JsonSerializer.Deserialize>(rawHeader); - - if (headerDict is null) - { - logger?.LogWarning( - "Header JSON deserialization returned null. RawHeader: {RawHeader}, ProfileId: {ProfileId}, Id: {Id}", - rawHeader, action.ProfileId, action.Id); - return; - } + var headerDict = JsonSerializer.Deserialize>(rawHeader) + ?? throw new DataIntegrityException( + $"Header query returned invalid JSON. ActionId: {action.Id}, ProfileId: {action.ProfileId}"); action.Headers = headerDict.ToDictionary(header => header.Key, kvp => kvp.Value.ToString()); }