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