using MediatR; using DigitalData.Core.Abstraction.Application.Repository; using AutoMapper; using Microsoft.EntityFrameworkCore; using DigitalData.Core.Exceptions; using ReC.Application.Common.Dto; using ReC.Domain.Views; namespace ReC.Application.RecActionViews.Queries; public record ReadRecActionViewQuery : IRequest> { public long? ProfileId { get; init; } = null; public bool? Invoked { get; set; } = null; } public class ReadRecActionViewQueryHandler(IRepository repo, IMapper mapper) : IRequestHandler> { public async Task> Handle(ReadRecActionViewQuery request, CancellationToken cancel) { var query = repo.Query; if (request.ProfileId is long profileId) query = repo.Where(act => act.ProfileId == profileId); if (request.Invoked is bool invoked) query = invoked ? query.Where(act => act.Root!.OutRes != null) : query.Where(act => act.Root!.OutRes == null); var actions = await query.Include(act => act.EndpointAuth).ToListAsync(cancel); if (actions.Count == 0) throw new NotFoundException($"No actions found for the profile {request.ProfileId}."); return mapper.Map>(actions); } }