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 WorkspaceDto( Guid Id, string Name, string Slug, string? LogoUrl, string TimeZone, DateTimeOffset CreatedAt); public class GetWorkspacesHandler( AppDbContext dbContext, AccessScopeService accessScopeService) : EndpointWithoutRequest> { public override void Configure() { Get("/api/workspaces"); Options(o => o.WithTags("Workspaces")); } public override async Task HandleAsync(CancellationToken ct) { IQueryable query = dbContext.Workspaces.AsQueryable(); if (!accessScopeService.IsManager(User)) { IReadOnlyCollection workspaceScopeIds = User.GetWorkspaceScopeIds(); query = query.Where(workspace => workspaceScopeIds.Contains(workspace.Id)); } List workspaces = await query .OrderBy(workspace => workspace.Name) .Select(workspace => new WorkspaceDto( workspace.Id, workspace.Name, workspace.Slug, workspace.LogoUrl, workspace.TimeZone, workspace.CreatedAt)) .ToListAsync(ct); await SendOkAsync(workspaces, ct); } }