rename application standardId to universalIdentifier (#14825)

## Context
Rename standardId in application table to universalIdentifier to align
with the rest of migration v2 guidelines
This commit is contained in:
Weiko
2025-10-01 20:20:20 +02:00
committed by GitHub
parent ec317bd3d0
commit 64dc726f50
4 changed files with 55 additions and 21 deletions
@@ -0,0 +1,31 @@
import { type MigrationInterface, type QueryRunner } from 'typeorm';
export class RenameApplicationStandardIdToUniversalIdentifier1759341941773
implements MigrationInterface
{
name = 'RenameApplicationStandardIdToUniversalIdentifier1759341941773';
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`DROP INDEX "core"."IDX_APPLICATION_STANDARD_ID_WORKSPACE_ID_UNIQUE"`,
);
await queryRunner.query(
`ALTER TABLE "core"."application" RENAME COLUMN "standardId" TO "universalIdentifier"`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_APPLICATION_UNIVERSAL_IDENTIFIER_WORKSPACE_ID_UNIQUE" ON "core"."application" ("universalIdentifier", "workspaceId") WHERE "deletedAt" IS NULL AND "universalIdentifier" IS NOT NULL`,
);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(
`DROP INDEX "core"."IDX_APPLICATION_UNIVERSAL_IDENTIFIER_WORKSPACE_ID_UNIQUE"`,
);
await queryRunner.query(
`ALTER TABLE "core"."application" RENAME COLUMN "universalIdentifier" TO "standardId"`,
);
await queryRunner.query(
`CREATE UNIQUE INDEX "IDX_APPLICATION_STANDARD_ID_WORKSPACE_ID_UNIQUE" ON "core"."application" ("standardId", "workspaceId") WHERE (("deletedAt" IS NULL) AND ("standardId" IS NOT NULL))`,
);
}
}
@@ -2,22 +2,22 @@ import { Injectable, Logger } from '@nestjs/common';
import { isDefined } from 'twenty-shared/utils';
import {
AgentManifest,
ObjectManifest,
} from 'src/engine/core-modules/application/types/application.types';
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service.';
import type { FlatObjectMetadataWithFlatFieldMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-with-flat-field-metadata-maps.type';
import { ObjectMetadataServiceV2 } from 'src/engine/metadata-modules/object-metadata/object-metadata-v2.service';
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
import { AgentService } from 'src/engine/metadata-modules/agent/agent.service';
import {
ApplicationException,
ApplicationExceptionCode,
} from 'src/engine/core-modules/application/application.exception';
import { ServerlessFunctionLayerService } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.service';
import { ApplicationService } from 'src/engine/core-modules/application/application.service';
import { ApplicationInput } from 'src/engine/core-modules/application/dtos/application.input';
import {
AgentManifest,
ObjectManifest,
} from 'src/engine/core-modules/application/types/application.types';
import { WorkspaceManyOrAllFlatEntityMapsCacheService } from 'src/engine/core-modules/common/services/workspace-many-or-all-flat-entity-maps-cache.service.';
import { AgentService } from 'src/engine/metadata-modules/agent/agent.service';
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
import type { FlatObjectMetadataWithFlatFieldMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-with-flat-field-metadata-maps.type';
import { ObjectMetadataServiceV2 } from 'src/engine/metadata-modules/object-metadata/object-metadata-v2.service';
import { ServerlessFunctionLayerService } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.service';
@Injectable()
export class ApplicationSyncService {
@@ -70,7 +70,7 @@ export class ApplicationSyncService {
}: ApplicationInput & {
workspaceId: string;
}): Promise<string> {
const application = await this.applicationService.findByStandardId(
const application = await this.applicationService.findByUniversalIdentifier(
manifest.standardId,
workspaceId,
);
@@ -85,7 +85,7 @@ export class ApplicationSyncService {
workspaceId,
);
const createdApplication = await this.applicationService.create({
standardId: manifest.standardId,
universalIdentifier: manifest.standardId,
label: manifest.label,
description: manifest.description,
version: manifest.version,
@@ -15,18 +15,18 @@ import {
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
import { AgentEntity } from 'src/engine/metadata-modules/agent/agent.entity';
import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { ServerlessFunctionLayerEntity } from 'src/engine/metadata-modules/serverless-function-layer/serverless-function-layer.entity';
import { ServerlessFunctionEntity } from 'src/engine/metadata-modules/serverless-function/serverless-function.entity';
@Entity({ name: 'application', schema: 'core' })
@Index('IDX_APPLICATION_WORKSPACE_ID', ['workspaceId'])
@Index(
'IDX_APPLICATION_STANDARD_ID_WORKSPACE_ID_UNIQUE',
['standardId', 'workspaceId'],
'IDX_APPLICATION_UNIVERSAL_IDENTIFIER_WORKSPACE_ID_UNIQUE',
['universalIdentifier', 'workspaceId'],
{
unique: true,
where: '"deletedAt" IS NULL AND "standardId" IS NOT NULL',
where: '"deletedAt" IS NULL AND "universalIdentifier" IS NOT NULL',
},
)
export class ApplicationEntity {
@@ -34,7 +34,7 @@ export class ApplicationEntity {
id: string;
@Column({ nullable: true, type: 'uuid' })
standardId?: string;
universalIdentifier?: string;
@Column({ nullable: false, type: 'text' })
label: string;
@@ -19,17 +19,20 @@ export class ApplicationService {
});
}
async findByStandardId(standardId: string, workspaceId: string) {
async findByUniversalIdentifier(
universalIdentifier: string,
workspaceId: string,
) {
return this.applicationRepository.findOne({
where: {
standardId,
universalIdentifier,
workspaceId,
},
});
}
async create(data: {
standardId?: string;
universalIdentifier?: string;
label: string;
description?: string;
version?: string;