Adding replies to the Messaging system

This commit is contained in:
Jonathan Bourdon
2024-07-18 20:49:05 -04:00
parent ed8f41cf96
commit 841daef4d8
9 changed files with 76 additions and 35 deletions

View File

@@ -6,6 +6,6 @@ public class Message
public Guid SubjectId { get; init; }
public Guid CreatedBy { get; init; }
public DateTimeOffset CreatedAt { get; }
public Guid ParentId { get; init; }
public Guid? ParentId { get; init; }
public string Value { get; init; }
}

View File

@@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore;
namespace Hutopy.Web.Messages.Handlers;
public sealed class GetMessagesRequest
public class GetMessagesRequest
{
public Guid SubjectId { get; set; }
}
@@ -27,6 +27,7 @@ public class GetMessages(
var comments = await context
.Messages
.Where(c => c.SubjectId == req.SubjectId)
.Where(c => c.ParentId == null)
.ToListAsync(cancellationToken: ct);
await SendAsync(comments, cancellation: ct);

View File

@@ -0,0 +1,34 @@
using FastEndpoints;
using Hutopy.Web.Messages.Data;
using Microsoft.EntityFrameworkCore;
namespace Hutopy.Web.Messages.Handlers;
public class GetMessagesRepliesRequest
{
public Guid ParentId { get; set; }
}
public class GetMessagesByParent(
MessagingDbContext context)
: Endpoint<GetMessagesRepliesRequest, List<Message>>
{
public override void Configure()
{
Get("/api/messages/{ParentId:guid}/replies");
Options(o => o.WithTags("Messages"));
AllowAnonymous();
}
public override async Task HandleAsync(
GetMessagesRepliesRequest req,
CancellationToken ct)
{
var posts = await context
.Messages
.Where(c => c.ParentId == req.ParentId)
.ToListAsync(cancellationToken: ct);
await SendAsync(posts, cancellation: ct);
}
}

View File

@@ -4,7 +4,7 @@ using Microsoft.EntityFrameworkCore;
namespace Hutopy.Web.Messages.Handlers;
public sealed class GetMessagesByUserRequest
public class GetMessagesByUserRequest
{
public Guid UserId { get; set; }
}
@@ -17,6 +17,7 @@ public class GetMessagesByUser(
{
Get("/api/messages/user/{UserId:guid}");
Options(o => o.WithTags("Messages"));
AllowAnonymous();
}
public override async Task HandleAsync(
@@ -26,6 +27,7 @@ public class GetMessagesByUser(
var posts = await context
.Messages
.Where(c => c.CreatedBy == req.UserId)
.Where(c => c.ParentId == null)
.ToListAsync(cancellationToken: ct);
await SendAsync(posts, cancellation: ct);

View File

@@ -4,9 +4,11 @@ using Hutopy.Web.Messages.Data;
namespace Hutopy.Web.Messages.Handlers;
public record PostMessageRequest(
Guid SubjectId,
string Message);
public class PostMessageRequest
{
public Guid SubjectId { get; set; }
public string Message { get; set; }
}
public class PostMessage(
MessagingDbContext context)
@@ -22,15 +24,15 @@ public class PostMessage(
PostMessageRequest req,
CancellationToken ct)
{
await context.Messages.AddAsync(
new Message
var message = new Message
{
Id = GuidHelper.GenerateUuidV7(),
SubjectId = req.SubjectId,
CreatedBy = User.GetUserId(),
Value = req.Message
},
ct);
};
await context.Messages.AddAsync(message, ct);
await context.SaveChangesAsync(ct);
}

View File

@@ -4,18 +4,20 @@ using Hutopy.Web.Messages.Data;
namespace Hutopy.Web.Messages.Handlers;
public record PostReplyMessageRequest(
Guid SubjectId,
Guid ParentId,
string Message);
internal sealed class PostReplyMessageRequest
{
public required Guid SubjectId { get; set; }
public required Guid ParentId { get; set; }
public required string Message { get; set; }
}
public sealed class PostReplyMessage(
internal sealed class PostReplyMessage(
MessagingDbContext context)
: Endpoint<PostReplyMessageRequest>
{
public override void Configure()
{
Post("/api/messages/reply");
Post("/api/messages/{ParentId:guid}/replies");
Options(o => o.WithTags("Messages"));
}
@@ -23,16 +25,16 @@ public sealed class PostReplyMessage(
PostReplyMessageRequest req,
CancellationToken ct)
{
await context.Messages.AddAsync(
new Message
var message = new Message
{
Id = GuidHelper.GenerateUuidV7(),
SubjectId = req.SubjectId,
ParentId = req.ParentId,
CreatedBy = User.GetUserId(),
Value = req.Message
},
ct);
};
await context.Messages.AddAsync(message, ct);
await context.SaveChangesAsync(ct);
}

View File

@@ -12,7 +12,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
namespace Hutopy.Web.Messages.Migrations
{
[DbContext(typeof(MessagingDbContext))]
[Migration("20240718041130_Initial")]
[Migration("20240718173016_Initial")]
partial class Initial
{
/// <inheritdoc />
@@ -40,7 +40,7 @@ namespace Hutopy.Web.Messages.Migrations
b.Property<Guid>("CreatedBy")
.HasColumnType("uuid");
b.Property<Guid>("ParentId")
b.Property<Guid?>("ParentId")
.HasColumnType("uuid");
b.Property<Guid>("SubjectId")

View File

@@ -23,7 +23,7 @@ namespace Hutopy.Web.Messages.Migrations
SubjectId = table.Column<Guid>(type: "uuid", nullable: false),
CreatedBy = table.Column<Guid>(type: "uuid", nullable: false),
CreatedAt = table.Column<DateTimeOffset>(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP"),
ParentId = table.Column<Guid>(type: "uuid", nullable: false),
ParentId = table.Column<Guid>(type: "uuid", nullable: true),
Value = table.Column<string>(type: "text", nullable: false)
},
constraints: table =>

View File

@@ -37,7 +37,7 @@ namespace Hutopy.Web.Messages.Migrations
b.Property<Guid>("CreatedBy")
.HasColumnType("uuid");
b.Property<Guid>("ParentId")
b.Property<Guid?>("ParentId")
.HasColumnType("uuid");
b.Property<Guid>("SubjectId")