37 lines
1.3 KiB
C#
37 lines
1.3 KiB
C#
using MediatR;
|
|
using Modules.Rating.Api.Database.Entities;
|
|
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.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;
|
|
}
|
|
} |