Merged PR 119: Added message count endpoint
Added message count endpoint
This commit is contained in:
@@ -56,4 +56,21 @@ public class MessagingDbContext(
|
||||
|
||||
return messages;
|
||||
}
|
||||
|
||||
public async Task<int> GetMessageCountAsync(
|
||||
Guid subjectId,
|
||||
Guid? parentId,
|
||||
int pageSize,
|
||||
CancellationToken ct = default)
|
||||
{
|
||||
var query = Messages
|
||||
.Where(c => c.SubjectId == subjectId)
|
||||
.Where(c => c.ParentId == parentId);
|
||||
|
||||
var messageCount = await query
|
||||
.Take(pageSize)
|
||||
.CountAsync(ct);
|
||||
|
||||
return messageCount;
|
||||
}
|
||||
}
|
||||
|
||||
44
src/Web/Features/Messages/Handlers/GetMessageCount.cs
Normal file
44
src/Web/Features/Messages/Handlers/GetMessageCount.cs
Normal file
@@ -0,0 +1,44 @@
|
||||
using Hutopy.Web.Features.Messages.Data;
|
||||
|
||||
namespace Hutopy.Web.Features.Messages.Handlers;
|
||||
|
||||
public sealed class GetMessageCountRequest
|
||||
{
|
||||
public Guid SubjectId { get; set; }
|
||||
[BindFrom("page_size")] public int PageSize { get; set; } = 1000;
|
||||
}
|
||||
|
||||
public record struct GetMessageCountResponse
|
||||
{
|
||||
public required int Count { get; init; }
|
||||
}
|
||||
|
||||
public class GetMessageCount(
|
||||
MessagingDbContext context)
|
||||
: Endpoint<GetMessageCountRequest, GetMessageCountResponse>
|
||||
{
|
||||
public override void Configure()
|
||||
{
|
||||
Get("/api/message-count/{SubjectId:guid}");
|
||||
Options(o => o.WithTags("Messages"));
|
||||
AllowAnonymous();
|
||||
}
|
||||
|
||||
public override async Task HandleAsync(
|
||||
GetMessageCountRequest req,
|
||||
CancellationToken ct)
|
||||
{
|
||||
var messageCount = await context.GetMessageCountAsync(
|
||||
req.SubjectId,
|
||||
null,
|
||||
req.PageSize,
|
||||
ct);
|
||||
|
||||
await SendAsync(
|
||||
new()
|
||||
{
|
||||
Count = messageCount
|
||||
},
|
||||
cancellation: ct);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user