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