feat: sync metadata can alter and update a field (#3944)
This commit is contained in:
@ -55,7 +55,7 @@ export class WorkspaceFieldComparator {
|
|||||||
const standardFieldMetadataMap = transformMetadataForComparison(
|
const standardFieldMetadataMap = transformMetadataForComparison(
|
||||||
standardObjectMetadata.fields,
|
standardObjectMetadata.fields,
|
||||||
{
|
{
|
||||||
propertiesToIgnore: fieldPropertiesToStringify,
|
propertiesToStringify: fieldPropertiesToStringify,
|
||||||
keyFactory(datum) {
|
keyFactory(datum) {
|
||||||
return datum.name;
|
return datum.name;
|
||||||
},
|
},
|
||||||
|
|||||||
@ -108,7 +108,10 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
storage: WorkspaceSyncStorage,
|
storage: WorkspaceSyncStorage,
|
||||||
): Promise<{
|
): Promise<{
|
||||||
createdFieldMetadataCollection: FieldMetadataEntity[];
|
createdFieldMetadataCollection: FieldMetadataEntity[];
|
||||||
updatedFieldMetadataCollection: FieldMetadataEntity[];
|
updatedFieldMetadataCollection: {
|
||||||
|
current: FieldMetadataEntity;
|
||||||
|
altered: FieldMetadataEntity;
|
||||||
|
}[];
|
||||||
}> {
|
}> {
|
||||||
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
const fieldMetadataRepository = manager.getRepository(FieldMetadataEntity);
|
||||||
|
|
||||||
@ -124,6 +127,11 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
/**
|
/**
|
||||||
* Update field metadata
|
* Update field metadata
|
||||||
*/
|
*/
|
||||||
|
const oldFieldMetadataCollection = await fieldMetadataRepository.find({
|
||||||
|
where: {
|
||||||
|
id: In(storage.fieldMetadataUpdateCollection.map((field) => field.id)),
|
||||||
|
},
|
||||||
|
});
|
||||||
const updatedFieldMetadataCollection = await fieldMetadataRepository.save(
|
const updatedFieldMetadataCollection = await fieldMetadataRepository.save(
|
||||||
storage.fieldMetadataUpdateCollection as DeepPartial<FieldMetadataEntity>[],
|
storage.fieldMetadataUpdateCollection as DeepPartial<FieldMetadataEntity>[],
|
||||||
);
|
);
|
||||||
@ -148,8 +156,29 @@ export class WorkspaceMetadataUpdaterService {
|
|||||||
return {
|
return {
|
||||||
createdFieldMetadataCollection:
|
createdFieldMetadataCollection:
|
||||||
createdFieldMetadataCollection as FieldMetadataEntity[],
|
createdFieldMetadataCollection as FieldMetadataEntity[],
|
||||||
updatedFieldMetadataCollection:
|
updatedFieldMetadataCollection: oldFieldMetadataCollection.map(
|
||||||
updatedFieldMetadataCollection as FieldMetadataEntity[],
|
(oldFieldMetadata) => {
|
||||||
|
const alteredFieldMetadata = updatedFieldMetadataCollection.find(
|
||||||
|
(field) => field.id === oldFieldMetadata.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
if (!alteredFieldMetadata) {
|
||||||
|
throw new Error(
|
||||||
|
`Field ${oldFieldMetadata.id} not found in updatedFieldMetadataCollection`,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
current: oldFieldMetadata as FieldMetadataEntity,
|
||||||
|
// TypeORM save method doesn't return the whole entity...
|
||||||
|
// https://github.com/typeorm/typeorm/issues/3490
|
||||||
|
altered: {
|
||||||
|
...oldFieldMetadata,
|
||||||
|
...alteredFieldMetadata,
|
||||||
|
} as FieldMetadataEntity,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -160,6 +160,13 @@ export class WorkspaceSyncObjectMetadataService {
|
|||||||
WorkspaceMigrationBuilderAction.CREATE,
|
WorkspaceMigrationBuilderAction.CREATE,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const updateFieldWorkspaceMigrations =
|
||||||
|
await this.workspaceMigrationFieldFactory.create(
|
||||||
|
originalObjectMetadataCollection,
|
||||||
|
metadataFieldUpdaterResult.updatedFieldMetadataCollection,
|
||||||
|
WorkspaceMigrationBuilderAction.UPDATE,
|
||||||
|
);
|
||||||
|
|
||||||
const deleteFieldWorkspaceMigrations =
|
const deleteFieldWorkspaceMigrations =
|
||||||
await this.workspaceMigrationFieldFactory.create(
|
await this.workspaceMigrationFieldFactory.create(
|
||||||
originalObjectMetadataCollection,
|
originalObjectMetadataCollection,
|
||||||
@ -173,6 +180,7 @@ export class WorkspaceSyncObjectMetadataService {
|
|||||||
...createObjectWorkspaceMigrations,
|
...createObjectWorkspaceMigrations,
|
||||||
...deleteObjectWorkspaceMigrations,
|
...deleteObjectWorkspaceMigrations,
|
||||||
...createFieldWorkspaceMigrations,
|
...createFieldWorkspaceMigrations,
|
||||||
|
...updateFieldWorkspaceMigrations,
|
||||||
...deleteFieldWorkspaceMigrations,
|
...deleteFieldWorkspaceMigrations,
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@ -15,8 +15,9 @@ export class WorkspaceSyncStorage {
|
|||||||
|
|
||||||
// Field metadata
|
// Field metadata
|
||||||
private readonly _fieldMetadataCreateCollection: PartialFieldMetadata[] = [];
|
private readonly _fieldMetadataCreateCollection: PartialFieldMetadata[] = [];
|
||||||
private readonly _fieldMetadataUpdateCollection: Partial<PartialFieldMetadata>[] =
|
private readonly _fieldMetadataUpdateCollection: Partial<
|
||||||
[];
|
PartialFieldMetadata & { id: string }
|
||||||
|
>[] = [];
|
||||||
private readonly _fieldMetadataDeleteCollection: FieldMetadataEntity[] = [];
|
private readonly _fieldMetadataDeleteCollection: FieldMetadataEntity[] = [];
|
||||||
|
|
||||||
// Relation metadata
|
// Relation metadata
|
||||||
|
|||||||
Reference in New Issue
Block a user