Clean views without object metadata (#7153)

Add command for cleaning + clean on object deletion
This commit is contained in:
Thomas Trompette
2024-09-19 18:13:07 +02:00
committed by GitHub
parent 3025ac346c
commit 8964d26d5b
6 changed files with 195 additions and 10 deletions

View File

@ -10,7 +10,6 @@ import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
import { TypeORMModule } from 'src/database/typeorm/typeorm.module';
import { FeatureFlagEntity } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
@ -44,7 +43,6 @@ import { UpdateObjectPayload } from './dtos/update-object.input';
WorkspaceMigrationModule,
WorkspaceMigrationRunnerModule,
WorkspaceMetadataVersionModule,
FeatureFlagModule,
RemoteTableRelationsModule,
],
services: [ObjectMetadataService],

View File

@ -10,7 +10,6 @@ import { FindManyOptions, FindOneOptions, In, Repository } from 'typeorm';
import { FieldMetadataSettings } from 'src/engine/metadata-modules/field-metadata/interfaces/field-metadata-settings.interface';
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
import {
FieldMetadataEntity,
@ -60,6 +59,7 @@ import {
createRelationDeterministicUuid,
} from 'src/engine/workspace-manager/workspace-sync-metadata/utils/create-deterministic-uuid.util';
import { FavoriteWorkspaceEntity } from 'src/modules/favorite/standard-objects/favorite.workspace-entity';
import { ViewWorkspaceEntity } from 'src/modules/view/standard-objects/view.workspace-entity';
import { ObjectMetadataEntity } from './object-metadata.entity';
@ -85,7 +85,6 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
private readonly workspaceMigrationRunnerService: WorkspaceMigrationRunnerService,
private readonly workspaceMetadataVersionService: WorkspaceMetadataVersionService,
private readonly twentyORMGlobalManager: TwentyORMGlobalManager,
private readonly featureFlagService: FeatureFlagService,
) {
super(objectMetadataRepository);
}
@ -143,6 +142,24 @@ export class ObjectMetadataService extends TypeOrmQueryService<ObjectMetadataEnt
await this.deleteAllRelationsAndDropTable(objectMetadata, workspaceId);
}
// DELETE VIEWS
const viewRepository =
await this.twentyORMGlobalManager.getRepositoryForWorkspace<ViewWorkspaceEntity>(
workspaceId,
'view',
);
const views = await viewRepository.find({
where: {
objectMetadataId: objectMetadata.id,
},
});
if (views.length > 0) {
await viewRepository.delete(views.map((view) => view.id));
}
// DELETE OBJECT
await this.objectMetadataRepository.delete(objectMetadata.id);
await this.workspaceMigrationRunnerService.executeMigrationFromPendingMigrations(