From d8d77652acec1994c6b44394af9296d5a255eddb Mon Sep 17 00:00:00 2001 From: TekH Date: Mon, 15 Dec 2025 17:11:23 +0100 Subject: [PATCH] Implement ReadResultViewQuery handler with filtering Added ReadResultViewQueryHandler to support querying ResultView entities with optional filters (Id, ActionId, ProfileId). Integrated repository and AutoMapper, included error handling for no results, and improved using directives. --- .../Queries/ReadResultViewQuery.cs | 38 ++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/ReC.Application/ResultViews/Queries/ReadResultViewQuery.cs b/src/ReC.Application/ResultViews/Queries/ReadResultViewQuery.cs index 41d8d04..6b1b5a0 100644 --- a/src/ReC.Application/ResultViews/Queries/ReadResultViewQuery.cs +++ b/src/ReC.Application/ResultViews/Queries/ReadResultViewQuery.cs @@ -1,5 +1,11 @@ -using MediatR; +using AutoMapper; +using DigitalData.Core.Abstraction.Application.Repository; +using DigitalData.Core.Exceptions; +using MediatR; +using Microsoft.EntityFrameworkCore; using ReC.Application.Common.Dto; +using ReC.Domain.Entities; +using System.Text.Json; namespace ReC.Application.ResultViews.Queries; @@ -10,4 +16,34 @@ public record ReadResultViewQuery : IRequest> public long? ActionId { get; init; } = null; public long? ProfileId { get; init; } = null; +} + +public class ReadResultViewQueryHandler(IRepository repo, IMapper mapper) : IRequestHandler> +{ + public async Task> Handle(ReadResultViewQuery request, CancellationToken cancel) + { + var q = repo.Query; + + if(request.Id is long id) + q = q.Where(rv => rv.Id == id); + + if(request.ActionId is long actionId) + q = q.Where(rv => rv.ActionId == actionId); + + if(request.ProfileId is long profileId) + q = q.Where(rv => rv.ProfileId == profileId); + + var entities = await q.ToListAsync(cancel); + + if (entities.Count == 0) + throw new NotFoundException($"No result views found for the given criteria. Criteria: { + JsonSerializer.Serialize(request, options: new() + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + WriteIndented = true + })}" + ); + + return mapper.Map>(entities); + } } \ No newline at end of file