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 Permissions, DateTimeOffset CreatedAt); internal record OrganizationDto( Guid Id, string Name, string? LogoUrl, OrganizationGoogleDriveDamConfigurationDto GoogleDriveDam, OrganizationMembershipTierDto? MembershipTier, Guid OwnerUserId, IReadOnlyCollection CurrentUserPermissions, IReadOnlyCollection Members, IReadOnlyCollection Workspaces, OrganizationUsageDto? Usage, IReadOnlyCollection AvailableMembershipTiers, DateTimeOffset CreatedAt) { public static OrganizationDto FromOrganization( Organization organization, IReadOnlyCollection currentUserPermissions, OrganizationMembershipTierDto? membershipTier = null, IReadOnlyCollection? members = null, IReadOnlyCollection? workspaces = null, OrganizationUsageDto? usage = null, IReadOnlyCollection? 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 Items); internal record OrganizationUsageItemDto( string Key, int Used, int? Limit);