diff --git a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-role-permission-flag.util.ts b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-role-permission-flag.util.ts index 20ee809650..1bab442cda 100644 --- a/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-role-permission-flag.util.ts +++ b/packages/twenty-server/src/engine/core-modules/application/application-manifest/converters/from-permission-flag-to-universal-flat-role-permission-flag.util.ts @@ -1,7 +1,3 @@ -import { - PermissionFlagType, - SystemPermissionFlag, -} from 'twenty-shared/constants'; import { v5 } from 'uuid'; import { type UniversalFlatRolePermissionFlag } from 'src/engine/workspace-manager/workspace-migration/universal-flat-entity/types/universal-flat-role-permission-flag.type'; @@ -9,10 +5,6 @@ import { type UniversalFlatRolePermissionFlag } from 'src/engine/workspace-manag export const ROLE_PERMISSION_FLAG_UUID_NAMESPACE = 'b9a3b3b3-58a3-4f6c-9c1f-3a4f6c9c1f3a'; -const SYSTEM_PERMISSION_FLAG_BY_UNIVERSAL_IDENTIFIER = Object.fromEntries( - Object.entries(SystemPermissionFlag).map(([key, uuid]) => [uuid, key]), -) as Record; - export const fromPermissionFlagToUniversalFlatRolePermissionFlag = ({ permissionFlagUniversalIdentifier, roleUniversalIdentifier, @@ -29,17 +21,11 @@ export const fromPermissionFlagToUniversalFlatRolePermissionFlag = ({ ROLE_PERMISSION_FLAG_UUID_NAMESPACE, ); - const resolvedFlag = - SYSTEM_PERMISSION_FLAG_BY_UNIVERSAL_IDENTIFIER[ - permissionFlagUniversalIdentifier - ]; - return { universalIdentifier, applicationUniversalIdentifier, roleUniversalIdentifier, permissionFlagUniversalIdentifier, - flag: resolvedFlag as PermissionFlagType, createdAt: now, updatedAt: now, }; diff --git a/packages/twenty-server/src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator.ts b/packages/twenty-server/src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator.ts index 0fe3889d65..7531685e5b 100644 --- a/packages/twenty-server/src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator.ts +++ b/packages/twenty-server/src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator.ts @@ -12,6 +12,12 @@ export type WasRemovedInUpgrade = T & { readonly [wasRemovedInUpgradeBrand]?: true; }; +export type UnwrapWasRemovedInUpgrade = [T] extends [ + WasRemovedInUpgrade, +] + ? TUnwrapped + : T; + type WasRemovedInUpgradeKeys = { [K in keyof TEntity]: typeof wasRemovedInUpgradeBrand extends keyof TEntity[K] ? K diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts index e643f9dcd2..4ee61552d7 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-entity/constant/all-entity-properties-configuration-by-metadata-name.constant.ts @@ -1,5 +1,6 @@ import { type AllMetadataName } from 'twenty-shared/metadata'; +import { type UnwrapWasRemovedInUpgrade } from 'src/engine/core-modules/upgrade/decorators/was-removed-in-upgrade.decorator'; import { type MetadataEntity } from 'src/engine/metadata-modules/flat-entity/types/metadata-entity.type'; import { type MetadataManyToOneJoinColumn } from 'src/engine/metadata-modules/flat-entity/types/metadata-many-to-one-join-column.type'; import { type ScalarFlatEntity } from 'src/engine/metadata-modules/flat-entity/types/scalar-flat-entity.type'; @@ -29,9 +30,13 @@ type MetadataEntityPropertyConfiguration< toStringify: K extends ExtractJsonbProperties> ? true : K extends keyof MetadataEntity - ? NonNullable[K]> extends Date + ? NonNullable< + UnwrapWasRemovedInUpgrade[K]> + > extends Date ? false - : HasObjectInUnion[K]> + : HasObjectInUnion< + UnwrapWasRemovedInUpgrade[K]> + > : boolean; toCompare: boolean; isOverridable?: boolean; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-role-permission-flag/utils/from-create-role-permission-flag-input-to-flat-role-permission-flag-to-create.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-role-permission-flag/utils/from-create-role-permission-flag-input-to-flat-role-permission-flag-to-create.util.ts index e28ba00459..ca2560c7fc 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-role-permission-flag/utils/from-create-role-permission-flag-input-to-flat-role-permission-flag-to-create.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-role-permission-flag/utils/from-create-role-permission-flag-input-to-flat-role-permission-flag-to-create.util.ts @@ -21,7 +21,7 @@ export const fromCreateRolePermissionFlagInputToFlatRolePermissionFlagToCreate = >): UniversalFlatRolePermissionFlag & { id: string; } => { - const { roleId, permissionFlagId, flag, universalIdentifier } = + const { roleId, permissionFlagId, universalIdentifier } = createRolePermissionFlagInput; const now = new Date().toISOString(); @@ -38,7 +38,6 @@ export const fromCreateRolePermissionFlagInputToFlatRolePermissionFlagToCreate = applicationUniversalIdentifier: flatApplication.universalIdentifier, permissionFlagUniversalIdentifier, roleUniversalIdentifier, - flag, createdAt: now, updatedAt: now, }; diff --git a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/dtos/create-role-permission-flag.input.ts b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/dtos/create-role-permission-flag.input.ts index d8a8e0f249..cf44b27fc5 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/dtos/create-role-permission-flag.input.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/dtos/create-role-permission-flag.input.ts @@ -1,8 +1,5 @@ -import { type PermissionFlagType } from 'twenty-shared/constants'; - export type CreateRolePermissionFlagInput = { roleId: string; permissionFlagId: string; - flag: PermissionFlagType; universalIdentifier?: string; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.entity.ts b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.entity.ts index bfc353e9b5..9f2bf32379 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.entity.ts @@ -51,7 +51,7 @@ export class RolePermissionFlagEntity extends SyncableEntity { '2.7.0_FinalizeRolePermissionFlagCutoverFastInstanceCommand_1779600000000', }) @Column({ nullable: false, type: 'varchar' }) - flag: PermissionFlagType; + flag: WasRemovedInUpgrade; @WasIntroducedInUpgrade({ upgradeCommandName: diff --git a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.service.ts b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.service.ts index c511b389d3..4882c133c8 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role-permission-flag/role-permission-flag.service.ts @@ -1,7 +1,6 @@ import { Injectable } from '@nestjs/common'; import { msg } from '@lingui/core/macro'; -import { type PermissionFlagType } from 'twenty-shared/constants'; import { isDefined } from 'twenty-shared/utils'; import { ApplicationService } from 'src/engine/core-modules/application/application.service'; @@ -118,7 +117,6 @@ export class RolePermissionFlagService { createRolePermissionFlagInput: { roleId: input.roleId, permissionFlagId: permissionFlag.id, - flag: permissionFlag.key as PermissionFlagType, }, flatApplication: workspaceCustomFlatApplication, flatPermissionFlagMaps, diff --git a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts index 6539aeda43..1406482e02 100644 --- a/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/role/services/workspace-roles-permissions-cache.service.ts @@ -294,7 +294,7 @@ export class WorkspaceRolesPermissionsCacheService extends WorkspaceCacheProvide // cursor (@WasIntroducedInUpgrade), so fall back to the legacy `flag` column. return ( rolePermissionFlag.permissionFlag?.universalIdentifier ?? - SystemPermissionFlag[rolePermissionFlag.flag] + SystemPermissionFlag[rolePermissionFlag.flag as PermissionFlagType] ); } }