using FastEndpoints; using Kbx.Shared.Runtime; namespace Kbx.Modules.Common.Runtime.Notifications; public sealed class Request { public int Limit { get; init; } = 30; } public sealed class Endpoint(KbxNotificationRepository repository) : Endpoint> { public override void Configure() { Get("/api/kbx/runtime/notifications"); Permissions("common.runtime.read"); } public override async Task HandleAsync(Request req, CancellationToken ct) => await Send.OkAsync(await repository.GetRecentAsync(RuntimeIdentity.TenantId(User), RuntimeIdentity.UserId(User), req.Limit, ct), ct); } public sealed class MarkReadRequest { public Guid Id { get; init; } } public sealed class MarkReadEndpoint(KbxNotificationRepository repository) : Endpoint { public override void Configure() { Post("/api/kbx/runtime/notifications/{Id}/read"); Permissions("common.runtime.read"); } public override async Task HandleAsync(MarkReadRequest req, CancellationToken ct) { await repository.MarkReadAsync(RuntimeIdentity.TenantId(User), RuntimeIdentity.UserId(User), req.Id, ct); await Send.NoContentAsync(ct); } }