using MediatR; using Modules.Library.Application.Gateways; using Modules.Rating.Api.Queries; using Modules.User.Application; namespace Modules.Library.Application.Queries.Anime.AnimeTitle; public class AnimeTitleQuery : IRequest { public Guid Id { get; init; } } public class AnimeTitleQueryHandler(IAnimeTitleGateway titleGateway, UserContext userContext, IMediator mediator) : IRequestHandler { public async Task Handle(AnimeTitleQuery request, CancellationToken cancellationToken) { var title = await titleGateway.GetDetail(request.Id, cancellationToken); var user = await userContext.GetUserInfo(cancellationToken); var titleRating = await mediator.Send(new ObjectRatingQuery { ObjectId = request.Id, SubjectId = user.Id, }, cancellationToken); title.Rating = titleRating?.ObjectRatePercentage; title.MyRating = titleRating?.SubjectRatePercentage; // var titleViews = await mediator.Send(new ObjectRatingQuery { ObjectId = request.Id, SubjectId = user.Id, }, cancellationToken); title.Views = 0; //titleViews?.Count; title.MyViews = 0; //titleViews?.UserViewsCount; title.LastViewPercentage = null; //0; var seasons = title.Items.OfType().ToList(); var episodes = title.Items.OfType() .Union(seasons.SelectMany(q => q.Episodes)); foreach (var episode in episodes) { var rating = await mediator.Send(new ObjectRatingQuery { ObjectId = episode.Id, SubjectId = user.Id, }, cancellationToken); episode.Rating = rating?.ObjectRatePercentage; episode.MyRating = rating?.ObjectRatePercentage; episode.ViewsCount = 0; episode.MyViewsCount = 0; episode.LastViewPercentage = null; } foreach (var season in seasons) { var rating = await mediator.Send(new ObjectRatingQuery { ObjectId = season.Id, SubjectId = user.Id, }, cancellationToken); season.Rating = rating?.ObjectRatePercentage; season.MyRating = rating?.ObjectRatePercentage; season.ViewsCount = 0; season.MyViewsCount = 0; season.LastViewPercentage = null; } return title; } }