wip
This commit is contained in:
@@ -2,16 +2,32 @@ using FastEndpoints;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Socialize.Api.Data;
|
||||
using Socialize.Api.Infrastructure.Security;
|
||||
using Socialize.Api.Modules.Approvals.Data;
|
||||
using Socialize.Api.Modules.Workspaces.Data;
|
||||
|
||||
namespace Socialize.Api.Modules.Workspaces.Handlers;
|
||||
|
||||
public record ApprovalStepConfigurationDto(
|
||||
Guid Id,
|
||||
Guid WorkspaceId,
|
||||
string Name,
|
||||
int SortOrder,
|
||||
string TargetType,
|
||||
string TargetValue,
|
||||
int RequiredApproverCount,
|
||||
DateTimeOffset CreatedAt);
|
||||
|
||||
public record WorkspaceDto(
|
||||
Guid Id,
|
||||
string Name,
|
||||
string Slug,
|
||||
string? LogoUrl,
|
||||
string TimeZone,
|
||||
string ApprovalMode,
|
||||
bool SchedulePostsAutomaticallyOnApproval,
|
||||
bool LockContentAfterApproval,
|
||||
bool SendAutomaticApprovalReminders,
|
||||
IReadOnlyCollection<ApprovalStepConfigurationDto> ApprovalSteps,
|
||||
DateTimeOffset CreatedAt);
|
||||
|
||||
internal class GetWorkspacesHandler(
|
||||
@@ -35,17 +51,53 @@ internal class GetWorkspacesHandler(
|
||||
query = query.Where(workspace => workspaceScopeIds.Contains(workspace.Id));
|
||||
}
|
||||
|
||||
var workspaces = await query
|
||||
var workspaceRows = await query
|
||||
.OrderBy(workspace => workspace.Name)
|
||||
.ToListAsync(ct);
|
||||
|
||||
var workspaceIds = workspaceRows.Select(workspace => workspace.Id).ToList();
|
||||
List<WorkspaceApprovalStepConfiguration> approvalStepRows = await dbContext.WorkspaceApprovalStepConfigurations
|
||||
.Where(step => workspaceIds.Contains(step.WorkspaceId))
|
||||
.OrderBy(step => step.SortOrder)
|
||||
.ThenBy(step => step.Name)
|
||||
.ToListAsync(ct);
|
||||
|
||||
var approvalStepsByWorkspaceId = approvalStepRows
|
||||
.GroupBy(step => step.WorkspaceId)
|
||||
.ToDictionary(
|
||||
group => group.Key,
|
||||
group => (IReadOnlyCollection<ApprovalStepConfigurationDto>)group
|
||||
.Select(ToApprovalStepConfigurationDto)
|
||||
.ToArray());
|
||||
|
||||
var workspaces = workspaceRows
|
||||
.Select(workspace => new WorkspaceDto(
|
||||
workspace.Id,
|
||||
workspace.Name,
|
||||
workspace.Slug,
|
||||
workspace.LogoUrl,
|
||||
workspace.TimeZone,
|
||||
workspace.ApprovalMode,
|
||||
workspace.SchedulePostsAutomaticallyOnApproval,
|
||||
workspace.LockContentAfterApproval,
|
||||
workspace.SendAutomaticApprovalReminders,
|
||||
approvalStepsByWorkspaceId.GetValueOrDefault(workspace.Id) ?? Array.Empty<ApprovalStepConfigurationDto>(),
|
||||
workspace.CreatedAt))
|
||||
.ToListAsync(ct);
|
||||
.ToList();
|
||||
|
||||
await SendOkAsync(workspaces, ct);
|
||||
}
|
||||
|
||||
public static ApprovalStepConfigurationDto ToApprovalStepConfigurationDto(WorkspaceApprovalStepConfiguration step)
|
||||
{
|
||||
return new ApprovalStepConfigurationDto(
|
||||
step.Id,
|
||||
step.WorkspaceId,
|
||||
step.Name,
|
||||
step.SortOrder,
|
||||
step.TargetType,
|
||||
step.TargetValue,
|
||||
step.RequiredApproverCount,
|
||||
step.CreatedAt);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user