37 lines
1.3 KiB
C#
37 lines
1.3 KiB
C#
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<IEnumerable<RecActionViewDto>>
|
|
{
|
|
public long? ProfileId { get; init; } = null;
|
|
|
|
public bool? Invoked { get; set; } = null;
|
|
}
|
|
|
|
public class ReadRecActionViewQueryHandler(IRepository<RecActionView> repo, IMapper mapper) : IRequestHandler<ReadRecActionViewQuery, IEnumerable<RecActionViewDto>>
|
|
{
|
|
public async Task<IEnumerable<RecActionViewDto>> 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<IEnumerable<RecActionViewDto>>(actions);
|
|
}
|
|
} |