Added message count endpoint
This commit is contained in:
@@ -56,4 +56,21 @@ public class MessagingDbContext(
|
|||||||
|
|
||||||
return messages;
|
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