33 lines
1.2 KiB
C#
33 lines
1.2 KiB
C#
using MediatR;
|
|
using Modules.Rating.Api.Repositories;
|
|
|
|
namespace Modules.Rating.Api.Querirs;
|
|
|
|
public class ObjectRatingQuery : IRequest<Models.Rate?>
|
|
{
|
|
public Guid ObjectId { get; set; } = default!;
|
|
public Guid? SubjectId { get; set; }
|
|
}
|
|
|
|
public class ObjectRatingQueryHandler(RateRepository repository) : IRequestHandler<ObjectRatingQuery, Models.Rate?>
|
|
{
|
|
public async Task<Models.Rate?> Handle(ObjectRatingQuery request, CancellationToken cancellationToken)
|
|
{
|
|
var rate = await repository.GetAverageObjectRate(request.ObjectId);
|
|
|
|
var subjectRate = request.SubjectId.HasValue
|
|
? await repository.GetFirstOrDefaultWhere(q => q.ObjectId == request.ObjectId &&
|
|
q.SubjectId == (request.SubjectId.HasValue ? request.SubjectId.Value : q.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;
|
|
}
|
|
} |