using Hutopy.Infrastructure.Security; using Hutopy.Modules.Messaging.Data; namespace Hutopy.Modules.Messaging.Handlers; public sealed class ChangeMessageRequest { public Guid? Id { get; set; } public required Guid SubjectId { get; set; } public required string Message { get; set; } } internal sealed class ChangeMessageRequestValidator : Validator { public ChangeMessageRequestValidator() { RuleFor(r => r.SubjectId) .NotNull().WithMessage("You must specify a SubjectId") .NotEmpty().WithMessage("You must specify a non-empty SubjectId"); RuleFor(r => r.Message) .NotNull().WithMessage("You must specify a Message") .NotEmpty().WithMessage("You must specify a non-empty Message"); } } public class ChangeMessage( MessagingDbContext context) : Endpoint { public override void Configure() { Post("/api/messages/update"); Options(o => o.WithTags("Messages")); } public override async Task HandleAsync( ChangeMessageRequest req, CancellationToken ct) { Message? message = await context.Messages.FirstOrDefaultAsync(x => x.Id == req.Id, ct); if (message is null) { await SendNotFoundAsync(ct); return; } Guid userId = HttpContext.User.GetUserId(); if (message.CreatedBy != userId) { await SendForbiddenAsync(ct); return; } message.SubjectId = req.SubjectId; message.Value = req.Message; context.Update(message); await context.SaveChangesAsync(ct); } }