Add calendar integrations and collaboration updates
This commit is contained in:
@@ -44,13 +44,15 @@ public class GetOrganizationHandler(
|
||||
|
||||
IReadOnlyCollection<OrganizationMemberDto> members = await GetMembersAsync(organizationId, ct);
|
||||
IReadOnlyCollection<WorkspaceDto> workspaces = await GetWorkspacesAsync(organizationId, ct);
|
||||
OrganizationUsageDto usage = await GetUsageAsync(organization, ct);
|
||||
|
||||
await SendOkAsync(
|
||||
OrganizationDto.FromOrganization(
|
||||
organization,
|
||||
currentUserPermissions,
|
||||
members,
|
||||
workspaces),
|
||||
workspaces,
|
||||
usage),
|
||||
ct);
|
||||
}
|
||||
|
||||
@@ -96,6 +98,57 @@ public class GetOrganizationHandler(
|
||||
.ToArray();
|
||||
}
|
||||
|
||||
private async Task<OrganizationUsageDto> GetUsageAsync(
|
||||
Organization organization,
|
||||
CancellationToken ct)
|
||||
{
|
||||
Guid[] workspaceIds = await dbContext.Workspaces
|
||||
.Where(workspace => workspace.OrganizationId == organization.Id)
|
||||
.Select(workspace => workspace.Id)
|
||||
.ToArrayAsync(ct);
|
||||
|
||||
Guid[] memberUserIds = await dbContext.OrganizationMemberships
|
||||
.Where(membership => membership.OrganizationId == organization.Id)
|
||||
.Select(membership => membership.UserId)
|
||||
.Distinct()
|
||||
.ToArrayAsync(ct);
|
||||
int userCount = memberUserIds
|
||||
.Append(organization.OwnerUserId)
|
||||
.Distinct()
|
||||
.Count();
|
||||
|
||||
int activeContentItemCount = workspaceIds.Length == 0
|
||||
? 0
|
||||
: await dbContext.ContentItems
|
||||
.Where(contentItem => workspaceIds.Contains(contentItem.WorkspaceId) &&
|
||||
contentItem.Status != "Approved" &&
|
||||
contentItem.Status != "Scheduled")
|
||||
.CountAsync(ct);
|
||||
|
||||
OrganizationUsageLimits limits = GetUsageLimits(organization.Name);
|
||||
|
||||
return new OrganizationUsageDto(
|
||||
limits.PlanName,
|
||||
[
|
||||
new OrganizationUsageItemDto("users", userCount, limits.UserLimit),
|
||||
new OrganizationUsageItemDto("workspaces", workspaceIds.Length, limits.WorkspaceLimit),
|
||||
new OrganizationUsageItemDto("activeContent", activeContentItemCount, limits.ActiveContentLimit),
|
||||
]);
|
||||
}
|
||||
|
||||
private static OrganizationUsageLimits GetUsageLimits(string organizationName)
|
||||
{
|
||||
return string.Equals(organizationName, "Northstar Agency", StringComparison.OrdinalIgnoreCase)
|
||||
? new OrganizationUsageLimits("Agency", 25, 15, 250)
|
||||
: new OrganizationUsageLimits("Free", 2, 1, 3);
|
||||
}
|
||||
|
||||
private sealed record OrganizationUsageLimits(
|
||||
string PlanName,
|
||||
int UserLimit,
|
||||
int WorkspaceLimit,
|
||||
int ActiveContentLimit);
|
||||
|
||||
private static string BuildDisplayName(User user)
|
||||
{
|
||||
if (!string.IsNullOrWhiteSpace(user.Alias))
|
||||
|
||||
Reference in New Issue
Block a user