40 lines
1.1 KiB
C#
40 lines
1.1 KiB
C#
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;
|
|
}
|
|
}
|
|
} |