using Hutopy.Infrastructure.Security; using Hutopy.Modules.Messaging.Data; namespace Hutopy.Modules.Messaging.Handlers; [PublicAPI] public sealed class AddMessageRequest { public Guid? Id { get; set; } public required Guid SubjectId { get; set; } public required string Message { get; set; } } internal sealed class AddMessageRequestValidator : Validator { public AddMessageRequestValidator() { 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 AddMessage( MessagingDbContext context) : Endpoint { public override void Configure() { Post("/api/messages"); Options(o => o.WithTags("Messages")); } public override async Task HandleAsync( AddMessageRequest req, CancellationToken ct) { Message message = new() { Id = req.Id ?? Guid.CreateVersion7(), SubjectId = req.SubjectId, CreatedBy = User.GetUserId(), Value = req.Message }; await context.Messages.AddAsync(message, ct); await context.SaveChangesAsync(ct); } }