using MediatR; using Modules.Rating.Api.Database.Entities; using Modules.Rating.Api.Repositories; namespace Modules.Rating.Api.Commands; public class RateObjectCommand : IRequest { public Guid ObjectId { get; set; } public Guid SubjectId { get; set; } public ushort RatePercentage { get; set; } } public class RateObjectCommandHandler(RateRepository repository) : IRequestHandler { public async Task Handle(RateObjectCommand request, CancellationToken cancellationToken) { var key = new RateKey { ObjectId = request.ObjectId, SubjectId = request.SubjectId, }; if (!await repository.IsRateExists(key)) { await repository.AddAsync(new Rate { Key = key, RatePercentage = request.RatePercentage, }); } else { await repository.UpdateAsync(new Rate { Key = key, RatePercentage = request.RatePercentage, }); } return Unit.Value; } }