Add applicationId to syncableEntity and fix syncApp deletion (#15170)

## Context
- All flatEntity should extend SyncableEntity
- SyncableEntity should now have applicationId and application relation
- Fix syncApp deletion, should now properly use migration v2 to delete
syncable entities
This commit is contained in:
Weiko
2025-10-17 19:23:00 +02:00
committed by GitHub
parent 84e7fabaab
commit cceeb6ed4d
79 changed files with 734 additions and 271 deletions
@@ -2,7 +2,6 @@ import {
Column,
CreateDateColumn,
Entity,
JoinColumn,
ManyToOne,
OneToMany,
PrimaryGeneratedColumn,
@@ -11,8 +10,9 @@ import {
UpdateDateColumn,
} from 'typeorm';
import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface';
import { type WorkspaceEntityDuplicateCriteria } from 'src/engine/api/graphql/workspace-query-builder/types/workspace-entity-duplicate-criteria.type';
import { ApplicationEntity } from 'src/engine/core-modules/application/application.entity';
import { DataSourceEntity } from 'src/engine/metadata-modules/data-source/data-source.entity';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity';
@@ -30,16 +30,16 @@ import { ViewEntity } from 'src/engine/metadata-modules/view/entities/view.entit
'namePlural',
'workspaceId',
])
export class ObjectMetadataEntity implements Required<ObjectMetadataEntity> {
export class ObjectMetadataEntity
extends SyncableEntity
implements Required<ObjectMetadataEntity>
{
@PrimaryGeneratedColumn('uuid')
id: string;
@Column({ nullable: true, type: 'uuid' })
standardId: string | null;
@Column({ nullable: true, type: 'uuid' })
applicationId: string | null;
@Column({ nullable: false, type: 'uuid' })
dataSourceId: string;
@@ -137,13 +137,6 @@ export class ObjectMetadataEntity implements Required<ObjectMetadataEntity> {
@UpdateDateColumn({ type: 'timestamptz' })
updatedAt: Date;
@ManyToOne(() => ApplicationEntity, (application) => application.objects, {
onDelete: 'CASCADE',
nullable: true,
})
@JoinColumn({ name: 'applicationId' })
application: Relation<ApplicationEntity> | null;
@OneToMany(
() => ObjectPermissionEntity,
(objectPermission) => objectPermission.objectMetadata,
@@ -12,7 +12,7 @@ import { getTsVectorColumnExpressionFromFields } from 'src/engine/workspace-mana
type BuildDefaultFlatFieldMetadataForCustomObjectArgs = {
workspaceId: string;
flatObjectMetadata: Pick<FlatObjectMetadata, 'id'>;
flatObjectMetadata: Pick<FlatObjectMetadata, 'id' | 'applicationId'>;
};
export type DefaultFlatFieldForCustomObjectMaps = ReturnType<
@@ -21,7 +21,7 @@ export type DefaultFlatFieldForCustomObjectMaps = ReturnType<
// This could be replaced totally by an import schema + its transpilation when it's ready
export const buildDefaultFlatFieldMetadatasForCustomObject = ({
workspaceId,
flatObjectMetadata: { id: objectMetadataId },
flatObjectMetadata: { id: objectMetadataId, applicationId },
}: BuildDefaultFlatFieldMetadataForCustomObjectArgs) => {
const createdAt = new Date();
const idField: FlatFieldMetadata<FieldMetadataType.UUID> = {
@@ -58,6 +58,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const nameField: FlatFieldMetadata<FieldMetadataType.TEXT> = {
@@ -94,6 +95,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const createdAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
@@ -130,6 +132,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const updatedAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
@@ -166,6 +169,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const deletedAtField: FlatFieldMetadata<FieldMetadataType.DATE_TIME> = {
@@ -202,6 +206,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const createdByField: FlatFieldMetadata<FieldMetadataType.ACTOR> = {
@@ -237,6 +242,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const positionField: FlatFieldMetadata<FieldMetadataType.POSITION> = {
@@ -273,6 +279,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
relationTargetObjectMetadataId: null,
settings: null,
morphId: null,
applicationId: applicationId ?? null,
};
const searchVectorField: FlatFieldMetadata<FieldMetadataType.TS_VECTOR> = {
@@ -312,6 +319,7 @@ export const buildDefaultFlatFieldMetadatasForCustomObject = ({
generatedType: 'STORED',
},
morphId: null,
applicationId: applicationId ?? null,
};
return {
@@ -44,6 +44,7 @@ export const buildDefaultIndexesForCustomObject = ({
universalIdentifier: tsFlatVectorIndexId,
updatedAt: createdAt,
workspaceId,
applicationId: flatObjectMetadata.applicationId ?? null,
},
flatObjectMetadata,
});
@@ -97,6 +97,7 @@ const generateSourceFlatFieldMetadata = ({
]),
workspaceId,
morphId: null,
applicationId: sourceFlatObjectMetadata.applicationId ?? null,
};
};
@@ -165,6 +166,7 @@ const generateTargetFlatFieldMetadata = ({
targetFlatObjectMetadata.id,
standardId,
]),
applicationId: sourceFlatObjectMetadata.applicationId ?? null,
};
};