using MediatR; using Modules.Library.Application.Gateways; using Modules.Rating.Api.Querirs; namespace Modules.Library.Application.Queries.Anime.AnimeTitle; public class AnimeTitleListQuery : IRequest> { public Guid? UserId { get; set; } } public class AnimeTitleListQueryHandler(IAnimeTitleGateway titleGateway, IMediator mediator) : IRequestHandler> { public async Task> Handle(AnimeTitleListQuery request, CancellationToken cancellationToken) { var titles = await titleGateway.GetList(); var rates = await mediator.Send(new ObjectRatingListQuery { ObjectIds = titles.Select(q => q.Id), SubjectId = request.UserId, }); rates.ForEach(q => { var title = titles.First(x => x.Id == q.ObjectId); title.Rate = q.ObjectRatePercentage; title.MyRate = q.SubjectRatePercentage; }); return titles; } }