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)) if (!await repository.IsRateExists(request.ObjectId, request.SubjectId)) { //await repository.AddAsync(new Rate { Key = key, RatePercentage = request.RatePercentage, }); await repository.AddAsync(new Rate { ObjectId = request.ObjectId, SubjectId = request.SubjectId, RatePercentage = request.RatePercentage, }); } else { //await repository.UpdateAsync(new Rate { Key = key, RatePercentage = request.RatePercentage, }); await repository.UpdateAsync(new Rate { ObjectId = request.ObjectId, SubjectId = request.SubjectId, RatePercentage = request.RatePercentage, }); } return Unit.Value; } }