using MediatR; using Modules.Library.Application.Gateways; using Modules.Rating.Api.Commands; using Modules.User.Application; namespace Modules.Library.Application.Commands.Anime.Title; public class UnrateTitleCommand : IRequest { public Guid TitleId { get; set; } } public class UnrateTitleCommandHandler(IAnimeTitleGateway titleGateway, UserContext userContext, IMediator mediator) : IRequestHandler { public async Task Handle(UnrateTitleCommand request, CancellationToken cancellationToken) { var user = await userContext.GetUserInfo(cancellationToken); if (!user.IsAuthenticated || (!user.Id.HasValue || user.Id == Guid.Empty)) { throw new Exception("User is not authenticated"); } var subjectId = user.Id.Value; var title = await titleGateway.GetById(request.TitleId); if (title != null && !title.Deleted) { await mediator.Send(new UnrateObjectCommand { ObjectId = title.Id, SubjectId = subjectId }); } return Unit.Value; } }