using Hutopy.Web.Common; using Hutopy.Web.Common.Security; using Hutopy.Web.Features.Messages.Data; namespace Hutopy.Web.Features.Messages.Handlers; public sealed class AddReplyRequest { public Guid? Id { get; set; } public required Guid ParentId { get; set; } public required Guid SubjectId { get; set; } public required string Message { get; set; } } internal sealed class AddReplyRequestValidator : Validator { public AddReplyRequestValidator() { RuleFor(r => r.ParentId) .NotNull().WithMessage("You must specify a ParentId") .NotEmpty().WithMessage("You must specify a non-empty ParentId"); 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"); } } internal sealed class AddReply( MessagingDbContext context) : Endpoint { public override void Configure() { Post("/api/messages/{ParentId:guid}/replies"); Options(o => o.WithTags("Messages")); } public override async Task HandleAsync( AddReplyRequest req, CancellationToken ct) { var message = new Message { Id = GuidHelper.GenerateUuidV7(), SubjectId = req.SubjectId, ParentId = req.ParentId, CreatedBy = User.GetUserId(), CreatedByName = User.GetName(), Value = req.Message }; await context.Messages.AddAsync(message, ct); await context.SaveChangesAsync(ct); } }