Create related records after object creation with migration v2 (view, view filters, favorite) (#14068)
## Context This PR introduces view actions for the migration v2. We should be able to create, update and delete views through the migration runner independently from object actions (this is not 100% true in this PR though as I'm still passing the object metadata to build the view) Note: Once favorite are moved out of the workspace schema, we will have favorite actions as well, in the meantime I have to inject some code at the end of the createOne method from the object metadata service
This commit is contained in:
+28
@@ -1,7 +1,11 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { InjectRepository } from '@nestjs/typeorm';
|
||||
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
import { Repository } from 'typeorm';
|
||||
|
||||
import { View } from 'src/engine/core-modules/view/entities/view.entity';
|
||||
import { ViewKey } from 'src/engine/core-modules/view/enums/view-key.enum';
|
||||
import { addFlatFieldMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-field-metadata-in-flat-object-metadata-maps-or-throw.util';
|
||||
import { addFlatObjectMetadataToFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/add-flat-object-metadata-to-flat-object-metadata-maps-or-throw.util';
|
||||
import { deleteFieldFromFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/delete-field-from-flat-object-metadata-maps-or-throw.util';
|
||||
@@ -22,6 +26,7 @@ import {
|
||||
ObjectMetadataException,
|
||||
ObjectMetadataExceptionCode,
|
||||
} from 'src/engine/metadata-modules/object-metadata/object-metadata.exception';
|
||||
import { ObjectMetadataRelatedRecordsService } from 'src/engine/metadata-modules/object-metadata/services/object-metadata-related-records.service';
|
||||
import { WorkspaceMetadataCacheService } from 'src/engine/metadata-modules/workspace-metadata-cache/services/workspace-metadata-cache.service';
|
||||
import { WorkspaceMigrationBuilderExceptionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/exceptions/workspace-migration-builder-exception-v2';
|
||||
import { WorkspaceMigrationValidateBuildAndRunService } from 'src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-validate-build-and-run-service';
|
||||
@@ -31,6 +36,9 @@ export class ObjectMetadataServiceV2 {
|
||||
constructor(
|
||||
private readonly workspaceMetadataCacheService: WorkspaceMetadataCacheService,
|
||||
private readonly workspaceMigrationValidateBuildAndRunService: WorkspaceMigrationValidateBuildAndRunService,
|
||||
private readonly objectMetadataRelatedRecordsService: ObjectMetadataRelatedRecordsService,
|
||||
@InjectRepository(View, 'core')
|
||||
private readonly viewRepository: Repository<View>,
|
||||
) {}
|
||||
|
||||
async updateOne({
|
||||
@@ -284,6 +292,26 @@ export class ObjectMetadataServiceV2 {
|
||||
);
|
||||
}
|
||||
|
||||
const [view] = await this.viewRepository.find({
|
||||
where: {
|
||||
objectMetadataId: createdFlatObjectMetadata.id,
|
||||
key: ViewKey.INDEX,
|
||||
workspaceId,
|
||||
},
|
||||
});
|
||||
|
||||
if (!isDefined(view)) {
|
||||
throw new ObjectMetadataException(
|
||||
'View not created',
|
||||
ObjectMetadataExceptionCode.INTERNAL_SERVER_ERROR,
|
||||
);
|
||||
}
|
||||
|
||||
await this.objectMetadataRelatedRecordsService.createViewWorkspaceFavorite(
|
||||
workspaceId,
|
||||
view.id,
|
||||
);
|
||||
|
||||
return createdFlatObjectMetadata;
|
||||
}
|
||||
}
|
||||
|
||||
+2
-1
@@ -11,6 +11,7 @@ import { NestjsQueryTypeOrmModule } from '@ptc-org/nestjs-query-typeorm';
|
||||
import { TypeORMModule } from 'src/database/typeorm/typeorm.module';
|
||||
import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
|
||||
import { FeatureFlagModule } from 'src/engine/core-modules/feature-flag/feature-flag.module';
|
||||
import { View } from 'src/engine/core-modules/view/entities/view.entity';
|
||||
import { SettingsPermissionsGuard } from 'src/engine/guards/settings-permissions.guard';
|
||||
import { WorkspaceAuthGuard } from 'src/engine/guards/workspace-auth.guard';
|
||||
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
|
||||
@@ -55,7 +56,7 @@ import { WorkspaceMigrationV2Module } from 'src/engine/workspace-manager/workspa
|
||||
[ObjectMetadataEntity, FieldMetadataEntity],
|
||||
'core',
|
||||
),
|
||||
TypeOrmModule.forFeature([FeatureFlag], 'core'),
|
||||
TypeOrmModule.forFeature([FeatureFlag, View], 'core'),
|
||||
DataSourceModule,
|
||||
WorkspaceMigrationModule,
|
||||
WorkspaceMigrationRunnerModule,
|
||||
|
||||
+1
-1
@@ -64,7 +64,7 @@ export class ObjectMetadataRelatedRecordsService {
|
||||
await viewFieldRepository.insert(viewFields);
|
||||
}
|
||||
|
||||
private async createViewWorkspaceFavorite(
|
||||
public async createViewWorkspaceFavorite(
|
||||
workspaceId: string,
|
||||
viewId: string,
|
||||
): Promise<void> {
|
||||
|
||||
Reference in New Issue
Block a user