using FastEndpoints; using Microsoft.EntityFrameworkCore; using Socialize.Api.Data; using Socialize.Api.Infrastructure.Security; using Socialize.Api.Modules.Workspaces.Data; namespace Socialize.Api.Modules.Workspaces.Handlers; public record WorkspaceInviteDto( Guid Id, Guid WorkspaceId, string Email, string Role, string Status, DateTimeOffset CreatedAt); public class GetWorkspaceInvitesHandler( AppDbContext dbContext, AccessScopeService accessScopeService) : EndpointWithoutRequest> { public override void Configure() { Get("/api/workspaces/{workspaceId:guid}/invites"); Options(o => o.WithTags("Workspaces")); } public override async Task HandleAsync(CancellationToken ct) { Guid workspaceId = Route("workspaceId"); if (!await accessScopeService.CanManageWorkspaceAsync(User, workspaceId, ct)) { await SendForbiddenAsync(ct); return; } List invites = await dbContext.WorkspaceInvites .Where(invite => invite.WorkspaceId == workspaceId) .OrderByDescending(invite => invite.CreatedAt) .Select(invite => new WorkspaceInviteDto( invite.Id, invite.WorkspaceId, invite.Email, invite.Role, invite.Status, invite.CreatedAt)) .ToListAsync(ct); await SendOkAsync(invites, ct); } }