Files
social-media/backend/Modules/Messaging/Handlers/DeleteMessage.cs

53 lines
1.3 KiB
C#

using Hutopy.Infrastructure.Security;
using Hutopy.Modules.Messaging.Data;
namespace Hutopy.Modules.Messaging.Handlers;
public record DeleteMessageRequest(Guid MessageId);
internal sealed class DeleteMessageRequestValidator
: Validator<DeleteMessageRequest>
{
public DeleteMessageRequestValidator()
{
RuleFor(r => r.MessageId)
.NotNull().WithMessage("You must specify a MessageId")
.NotEmpty().WithMessage("You must specify a non-empty MessageId");
}
}
public class DeleteMessage(
MessagingDbContext context)
: Endpoint<DeleteMessageRequest>
{
public override void Configure()
{
Delete("/api/messages/{MessageId}");
Options(o => o.WithTags("Messages"));
}
public override async Task HandleAsync(
DeleteMessageRequest req,
CancellationToken ct)
{
Message? message = await context.Messages.FirstOrDefaultAsync(x => x.Id == req.MessageId, ct);
if (message is null)
{
await SendNotFoundAsync(ct);
return;
}
Guid userId = HttpContext.User.GetUserId();
if (message.CreatedBy != userId)
{
await SendForbiddenAsync(ct);
return;
}
context.Messages.Remove(message);
await context.SaveChangesAsync(ct);
}
}