Files
social-media/backend/src/Socialize.Api/Modules/Organizations/Handlers/OrganizationDtos.cs

111 lines
3.4 KiB
C#

using Socialize.Api.Modules.Organizations.Data;
using Socialize.Api.Modules.Workspaces.Handlers;
namespace Socialize.Api.Modules.Organizations.Handlers;
internal record OrganizationMemberDto(
Guid UserId,
string DisplayName,
string Email,
string? PortraitUrl,
string Role,
IReadOnlyCollection<string> Permissions,
DateTimeOffset CreatedAt);
internal record OrganizationDto(
Guid Id,
string Name,
string? LogoUrl,
OrganizationGoogleDriveDamConfigurationDto GoogleDriveDam,
OrganizationMembershipTierDto? MembershipTier,
Guid OwnerUserId,
IReadOnlyCollection<string> CurrentUserPermissions,
IReadOnlyCollection<OrganizationMemberDto> Members,
IReadOnlyCollection<WorkspaceDto> Workspaces,
OrganizationUsageDto? Usage,
IReadOnlyCollection<OrganizationMembershipTierDto> AvailableMembershipTiers,
DateTimeOffset CreatedAt)
{
public static OrganizationDto FromOrganization(
Organization organization,
IReadOnlyCollection<string> currentUserPermissions,
OrganizationMembershipTierDto? membershipTier = null,
IReadOnlyCollection<OrganizationMemberDto>? members = null,
IReadOnlyCollection<WorkspaceDto>? workspaces = null,
OrganizationUsageDto? usage = null,
IReadOnlyCollection<OrganizationMembershipTierDto>? availableMembershipTiers = null)
{
return new OrganizationDto(
organization.Id,
organization.Name,
organization.LogoUrl,
OrganizationGoogleDriveDamConfigurationDto.FromOrganization(organization),
membershipTier,
organization.OwnerUserId,
currentUserPermissions,
members ?? [],
workspaces ?? [],
usage,
availableMembershipTiers ?? [],
organization.CreatedAt);
}
}
internal record OrganizationGoogleDriveDamConfigurationDto(
bool IsEnabled,
string? RootFolderId,
string? RootFolderName,
string? RootFolderUrl)
{
public static OrganizationGoogleDriveDamConfigurationDto FromOrganization(Organization organization)
{
return new OrganizationGoogleDriveDamConfigurationDto(
organization.IsGoogleDriveDamEnabled,
organization.GoogleDriveRootFolderId,
organization.GoogleDriveRootFolderName,
organization.GoogleDriveRootFolderUrl);
}
}
internal record OrganizationMembershipTierDto(
Guid Id,
string Key,
string Name,
string Description,
int? MonthlyPriceCents,
int? WorkspaceLimit,
int? ActiveContentLimit,
int? MemberLimit,
int? ExternalReviewerLimit,
bool IsCustom,
int SortOrder)
{
public static OrganizationMembershipTierDto FromTier(
OrganizationMembershipTier tier,
OrganizationMembershipTierTranslation translation)
{
return new OrganizationMembershipTierDto(
tier.Id,
tier.Key,
translation.Name,
translation.Description,
tier.MonthlyPriceCents,
tier.WorkspaceLimit,
tier.ActiveContentLimit,
tier.MemberLimit,
tier.ExternalReviewerLimit,
tier.IsCustom,
tier.SortOrder);
}
}
internal record OrganizationUsageDto(
string PlanKey,
string PlanName,
IReadOnlyCollection<OrganizationUsageItemDto> Items);
internal record OrganizationUsageItemDto(
string Key,
int Used,
int? Limit);