using MessengerApi.Contracts.Models.Scoped; using MessengerApi.Models.Scoped; namespace MessengerApi.Handlers.Endpoint { public class AckEndpointHandler { private readonly ILogger logger; private readonly IUnitOfWork unitOfWork; private readonly Identity identity; public AckEndpointHandler( ILogger logger, IUnitOfWork unitOfWork, Identity identity) { this.logger = logger; this.unitOfWork = unitOfWork; this.identity = identity; } public async Task AckMessage(Guid messageId) { var message = unitOfWork.Messages.GetById(messageId); // Authorize. if (message.ToId != this.identity.User.Id) { throw new InvalidOperationException("It's not your message to ack."); } else if(!message.IsDelivered) { throw new InvalidOperationException("Can't ack undelivered message."); } // Act. message.IsAcknowledged = true; } } }