fix: extract AppRegistrationSourceType to its own file

Break circular import chain: application-registration.entity →
user.entity → app-token.entity → workspace.entity →
application.entity → (back to) application-registration.entity.

The enum is now in its own file with no entity imports, so both entity
files can reference it without triggering a circular dependency at
module load time.

Made-with: Cursor
This commit is contained in:
Félix Malfait
2026-03-04 13:05:33 +01:00
parent f5243000e0
commit 682bcd0186
10 changed files with 26 additions and 28 deletions
@@ -1,4 +1,4 @@
import { Field, ObjectType, registerEnumType } from '@nestjs/graphql';
import { Field, ObjectType } from '@nestjs/graphql';
import { IDField } from '@ptc-org/nestjs-query-graphql';
import {
@@ -18,20 +18,13 @@ import {
import { UUIDScalarType } from 'src/engine/api/graphql/workspace-schema-builder/graphql-types/scalars';
import { ApplicationRegistrationVariableEntity } from 'src/engine/core-modules/application-registration/application-registration-variable.entity';
import { type MarketplaceDisplayData } from 'src/engine/core-modules/marketplace/types/marketplace-display-data.type';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity';
import { type MarketplaceDisplayData } from 'src/engine/core-modules/marketplace/types/marketplace-display-data.type';
import { UserEntity } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceEntity } from 'src/engine/core-modules/workspace/workspace.entity';
export enum AppRegistrationSourceType {
NPM = 'npm',
TARBALL = 'tarball',
LOCAL = 'local',
}
registerEnumType(AppRegistrationSourceType, {
name: 'AppRegistrationSourceType',
});
export { AppRegistrationSourceType };
@Entity({ name: 'applicationRegistration', schema: 'core' })
@ObjectType('ApplicationRegistration')
@@ -0,0 +1,11 @@
import { registerEnumType } from '@nestjs/graphql';
export enum AppRegistrationSourceType {
NPM = 'npm',
TARBALL = 'tarball',
LOCAL = 'local',
}
registerEnumType(AppRegistrationSourceType, {
name: 'AppRegistrationSourceType',
});
@@ -9,10 +9,8 @@ import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { v4 } from 'uuid';
import {
ApplicationRegistrationEntity,
AppRegistrationSourceType,
} from 'src/engine/core-modules/application-registration/application-registration.entity';
import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import {
ApplicationRegistrationException,
ApplicationRegistrationExceptionCode,
@@ -15,10 +15,8 @@ import {
UpdateDateColumn,
} from 'typeorm';
import {
ApplicationRegistrationEntity,
AppRegistrationSourceType,
} from 'src/engine/core-modules/application-registration/application-registration.entity';
import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { FileEntity } from 'src/engine/core-modules/file/entities/file.entity';
import { ApplicationVariableEntity } from 'src/engine/core-modules/applicationVariable/application-variable.entity';
import { AgentEntity } from 'src/engine/metadata-modules/ai/ai-agent/entities/agent.entity';
@@ -12,7 +12,7 @@ import { FileFolder } from 'twenty-shared/types';
import type { FileUpload } from 'graphql-upload/processRequest.mjs';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { MetadataResolver } from 'src/engine/api/graphql/graphql-config/decorators/metadata-resolver.decorator';
import { ApplicationExceptionFilter } from 'src/engine/core-modules/application/application-exception-filter';
import {
@@ -5,7 +5,7 @@ import { FileFolder } from 'twenty-shared/types';
import { isDefined } from 'twenty-shared/utils';
import { type QueryRunner, type Repository } from 'typeorm';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
import {
ApplicationException,
@@ -5,10 +5,8 @@ import { isDefined } from 'twenty-shared/utils';
import { Repository } from 'typeorm';
import { v4 } from 'uuid';
import {
ApplicationRegistrationEntity,
AppRegistrationSourceType,
} from 'src/engine/core-modules/application-registration/application-registration.entity';
import { ApplicationRegistrationEntity } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { MARKETPLACE_CATALOG_INDEX } from 'src/engine/core-modules/marketplace/constants/marketplace-catalog-index.constant';
import { MarketplaceCatalogSyncCronJob } from 'src/engine/core-modules/marketplace/crons/marketplace-catalog-sync.cron.job';
import { MarketplaceAppDTO } from 'src/engine/core-modules/marketplace/dtos/marketplace-app.dto';
@@ -5,7 +5,7 @@ import { FieldMetadataType } from 'twenty-shared/types';
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
import { createEmptyFlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/constant/create-empty-flat-entity-maps.constant';
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
@@ -6,7 +6,7 @@ import {
RelationType,
} from 'twenty-shared/types';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { type FlatApplication } from 'src/engine/core-modules/application/types/flat-application.type';
import {
generateMorphOrRelationFlatFieldMetadataPair,
@@ -1,4 +1,4 @@
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/application-registration.entity';
import { AppRegistrationSourceType } from 'src/engine/core-modules/application-registration/enums/app-registration-source-type.enum';
import { type ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
export const TWENTY_STANDARD_APPLICATION = {