using System; using System.Threading; using System.Threading.Tasks; using Knot.Modules.Relations.Application.Abstractions; using Knot.Modules.Relations.Domain; using Knot.Shared.Kernel; using Microsoft.EntityFrameworkCore; namespace Knot.Modules.Relations.Application.Contacts; public record DeclineContactRequestCommand(Guid UserId, Guid RequestId) : ICommand; internal sealed class DeclineContactRequestCommandHandler : ICommandHandler { private readonly IContactsDbContext _context; public DeclineContactRequestCommandHandler(IContactsDbContext context) { _context = context; } public async Task> Handle(DeclineContactRequestCommand request, CancellationToken cancellationToken) { var contact = await _context.Contacts.FirstOrDefaultAsync(c => c.Id == request.RequestId, cancellationToken); if (contact == null || contact.ContactId != request.UserId) { return Result.Failure(new Error("Contacts.NotFound", "Contact request not found.")); } contact.Decline(); await _context.SaveChangesAsync(cancellationToken); return Result.Success(true); } }