feat: sync command missing ability to rename standard object (#4819)

We've introduced in PR #4373 standard ids to be able to rename standard
fields and objects.
Fields part was working properly, but objects part was not yet
implemented.
This PR is adding the missing parts to make it work.
This commit is contained in:
Jérémy M
2024-04-09 10:20:34 +02:00
committed by GitHub
parent b1242bb850
commit 35717fce8b
16 changed files with 322 additions and 148 deletions

View File

@ -11,6 +11,7 @@ import {
WorkspaceMigrationColumnActionType,
WorkspaceMigrationEntity,
WorkspaceMigrationTableAction,
WorkspaceMigrationTableActionType,
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.factory';
@ -94,7 +95,7 @@ export class WorkspaceMigrationFieldFactory {
name: computeObjectTargetTable(
originalObjectMetadataMap[fieldMetadata.objectMetadataId],
),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: this.workspaceMigrationFactory.createColumnActions(
WorkspaceMigrationColumnActionType.CREATE,
fieldMetadata,
@ -132,7 +133,7 @@ export class WorkspaceMigrationFieldFactory {
fieldMetadataUpdate.current.objectMetadataId
],
),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: this.workspaceMigrationFactory.createColumnActions(
WorkspaceMigrationColumnActionType.ALTER,
fieldMetadataUpdate.current,
@ -171,7 +172,7 @@ export class WorkspaceMigrationFieldFactory {
name: computeObjectTargetTable(
originalObjectMetadataMap[fieldMetadata.objectMetadataId],
),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: [
{
action: WorkspaceMigrationColumnActionType.DROP,

View File

@ -8,11 +8,17 @@ import {
WorkspaceMigrationColumnActionType,
WorkspaceMigrationEntity,
WorkspaceMigrationTableAction,
WorkspaceMigrationTableActionType,
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
import { WorkspaceMigrationFactory } from 'src/engine/metadata-modules/workspace-migration/workspace-migration.factory';
import { generateMigrationName } from 'src/engine/metadata-modules/workspace-migration/utils/generate-migration-name.util';
export interface ObjectMetadataUpdate {
current: ObjectMetadataEntity;
altered: ObjectMetadataEntity;
}
@Injectable()
export class WorkspaceMigrationObjectFactory {
constructor(
@ -21,13 +27,35 @@ export class WorkspaceMigrationObjectFactory {
async create(
objectMetadataCollection: ObjectMetadataEntity[],
action:
| WorkspaceMigrationBuilderAction.CREATE
| WorkspaceMigrationBuilderAction.DELETE,
): Promise<Partial<WorkspaceMigrationEntity>[]>;
async create(
objectMetadataUpdateCollection: ObjectMetadataUpdate[],
action: WorkspaceMigrationBuilderAction.UPDATE,
): Promise<Partial<WorkspaceMigrationEntity>[]>;
async create(
objectMetadataCollectionOrObjectMetadataUpdateCollection:
| ObjectMetadataEntity[]
| ObjectMetadataUpdate[],
action: WorkspaceMigrationBuilderAction,
): Promise<Partial<WorkspaceMigrationEntity>[]> {
switch (action) {
case WorkspaceMigrationBuilderAction.CREATE:
return this.createObjectMigration(objectMetadataCollection);
return this.createObjectMigration(
objectMetadataCollectionOrObjectMetadataUpdateCollection as ObjectMetadataEntity[],
);
case WorkspaceMigrationBuilderAction.UPDATE:
return this.updateObjectMigration(
objectMetadataCollectionOrObjectMetadataUpdateCollection as ObjectMetadataUpdate[],
);
case WorkspaceMigrationBuilderAction.DELETE:
return this.deleteObjectMigration(objectMetadataCollection);
return this.deleteObjectMigration(
objectMetadataCollectionOrObjectMetadataUpdateCollection as ObjectMetadataEntity[],
);
default:
return [];
}
@ -42,7 +70,7 @@ export class WorkspaceMigrationObjectFactory {
const migrations: WorkspaceMigrationTableAction[] = [
{
name: computeObjectTargetTable(objectMetadata),
action: 'create',
action: WorkspaceMigrationTableActionType.CREATE,
},
];
@ -53,7 +81,7 @@ export class WorkspaceMigrationObjectFactory {
migrations.push({
name: computeObjectTargetTable(objectMetadata),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: this.workspaceMigrationFactory.createColumnActions(
WorkspaceMigrationColumnActionType.CREATE,
field,
@ -72,6 +100,40 @@ export class WorkspaceMigrationObjectFactory {
return workspaceMigrations;
}
private async updateObjectMigration(
objectMetadataUpdateCollection: ObjectMetadataUpdate[],
): Promise<Partial<WorkspaceMigrationEntity>[]> {
const workspaceMigrations: Partial<WorkspaceMigrationEntity>[] = [];
for (const objectMetadataUpdate of objectMetadataUpdateCollection) {
const oldTableName = computeObjectTargetTable(
objectMetadataUpdate.current,
);
const newTableName = computeObjectTargetTable(
objectMetadataUpdate.altered,
);
if (oldTableName !== newTableName) {
workspaceMigrations.push({
workspaceId: objectMetadataUpdate.current.workspaceId,
name: generateMigrationName(
`rename-${objectMetadataUpdate.current.nameSingular}`,
),
isCustom: false,
migrations: [
{
name: oldTableName,
newName: newTableName,
action: WorkspaceMigrationTableActionType.ALTER,
},
],
});
}
}
return workspaceMigrations;
}
private async deleteObjectMigration(
objectMetadataCollection: ObjectMetadataEntity[],
): Promise<Partial<WorkspaceMigrationEntity>[]> {
@ -81,8 +143,7 @@ export class WorkspaceMigrationObjectFactory {
const migrations: WorkspaceMigrationTableAction[] = [
{
name: computeObjectTargetTable(objectMetadata),
action: 'drop',
columns: [],
action: WorkspaceMigrationTableActionType.DROP,
},
];

View File

@ -7,6 +7,7 @@ import {
WorkspaceMigrationColumnActionType,
WorkspaceMigrationEntity,
WorkspaceMigrationTableAction,
WorkspaceMigrationTableActionType,
} from 'src/engine/metadata-modules/workspace-migration/workspace-migration.entity';
import { computeObjectTargetTable } from 'src/engine/utils/compute-object-target-table.util';
import {
@ -90,7 +91,7 @@ export class WorkspaceMigrationRelationFactory {
const migrations: WorkspaceMigrationTableAction[] = [
{
name: computeObjectTargetTable(toObjectMetadata),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: [
{
action: WorkspaceMigrationColumnActionType.DROP_FOREIGN_KEY,
@ -100,7 +101,7 @@ export class WorkspaceMigrationRelationFactory {
},
{
name: computeObjectTargetTable(toObjectMetadata),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: [
{
action: WorkspaceMigrationColumnActionType.CREATE_FOREIGN_KEY,
@ -166,7 +167,7 @@ export class WorkspaceMigrationRelationFactory {
const migrations: WorkspaceMigrationTableAction[] = [
{
name: computeObjectTargetTable(toObjectMetadata),
action: 'alter',
action: WorkspaceMigrationTableActionType.ALTER,
columns: [
{
action: WorkspaceMigrationColumnActionType.CREATE_FOREIGN_KEY,