using MediatR; using Modules.Rating.Api.Database.Entities; using Modules.Rating.Api.Repositories; namespace Modules.Rating.Api.Querirs; public class ObjectRatingQuery : IRequest { public Guid ObjectId { get; set; } = default!; public Guid? SubjectId { get; set; } } public class ObjectRatingQueryHandler(RateRepository repository) : IRequestHandler { public async Task Handle(ObjectRatingQuery request, CancellationToken cancellationToken) { var rate = await repository.GetAverageObjectRate(request.ObjectId); var subjectRate = request.SubjectId.HasValue ? await repository.GetFirstOrDefaultWhere(q => q.Key == new RateKey { ObjectId = request.ObjectId, SubjectId = request.SubjectId.HasValue ? request.SubjectId.Value : q.Key.SubjectId, }) : null; return rate.HasValue ? new Models.Rate { ObjectId = request.ObjectId, //SubjectId = request.SubjectId, ObjectRatePercentage = (ushort)Math.Round((decimal)rate, 0), SubjectRatePercentage = subjectRate?.RatePercentage, } : null; } }