From 2d8669ae714cd6ad3b1aaa457e90c3f3f16d41af Mon Sep 17 00:00:00 2001 From: Paul Rastoin <45004772+prastoin@users.noreply.github.com> Date: Wed, 17 Sep 2025 15:02:43 +0200 Subject: [PATCH] Index v2 runner (#14537) ## Introduction https://github.com/twentyhq/twenty/pull/14363 In this PR we're creating builder and runner for index metadata Removing its previous integration within object builder ## Next: - implem index impact on field and object metadata api - Add integration testing coverage add integration test on index - Implement uniqueness toggle in field metadata api - add integration test on uniqueness related to https://github.com/twentyhq/core-team-issues/issues/1344 --- ...-universal-identifier-to-index-metadata.ts | 25 + ...ll-flat-entity-maps-properties.constant.ts | 1 + .../empty-all-flat-entity-maps.constant.ts | 1 + ...t-entities-by-metadata-engine-name.type.ts | 2 + .../common/types/all-flat-entity-maps.type.ts | 19 +- ...n-field-input-transpilations-error.util.ts | 1 + .../get-flat-index-field-metadata.mock.ts | 24 - .../__mocks__/get-flat-index-metadata.mock.ts | 2 +- ...metadata-properties-to-compare.constant.ts | 9 + ...ata-entity-relation-properties.constant.ts | 6 + .../exceptions/index-exception-code.ts | 10 + .../workspace-flat-index-map-cache.service.ts | 64 ++ .../types/flat-index-field-metadata.type.ts | 15 - ...dex-metadata-properties-to-compare.type.ts | 4 + .../types/flat-index-metadata.type.ts | 26 +- .../compare-two-flat-index-metadata.util.ts | 50 +- ...data-entity-to-flat-index-metadata.util.ts | 28 + .../index-field-metadata.entity.ts | 4 +- .../index-metadata/index-metadata.entity.ts | 7 +- .../workspace-schema-index-manager.service.ts | 138 +---- .../workspace-schema-index-definition.type.ts | 1 - .../types/validate-error-response.type.ts | 2 +- ...ption-to-validation-response-error.util.ts | 8 +- ...igration-builder-exception-v2-formatter.ts | 7 +- ...ce-migration-build-orchestrator.service.ts | 37 +- .../types/flat-index-field-metadata.ts | 15 - .../types/property-update.type.ts | 5 + .../workspace-migration-builder.spec.ts.snap | 61 +- ...space-migration-builder-index-test-case.ts | 113 ---- .../workspace-migration-builder.spec.ts | 5 - ...ration-v2-index-actions-builder.service.ts | 160 +++++ ...pace-migration-v2-index-actions-builder.ts | 57 -- .../failed-flat-entity-validation.type.ts | 1 + ...ace-entity-migration-builder-v2.service.ts | 23 +- .../workspace-migration-builder-v2.service.ts | 15 - ...lat-field-metadata-property-update.type.ts | 11 - .../workspace-migration-action-common-v2.ts | 1 - .../workspace-migration-field-action-v2.ts | 7 +- .../workspace-migration-object-action-v2.ts | 16 +- .../flat-index-metadata-validator.service.ts | 168 ++++++ ...ace-migration-builder-validators.module.ts | 13 +- .../workspace-migration-builder-v2.module.ts | 3 + .../create-field-action-handler.service.ts | 2 +- .../update-field-action-handler.service.ts | 10 +- .../create-index-action-handler.service.ts | 78 ++- .../delete-index-action-handler.service.ts | 64 +- .../create-object-action-handler.service.ts | 2 +- ...reate-view-field-action-handler.service.ts | 2 +- .../create-view-action-handler.service.ts | 2 +- .../partial-index-metadata.interface.ts | 7 +- ...ate-view-field-v2.integration-spec.ts.snap | 16 +- ...-metadata-enum-v2.integration-spec.ts.snap | 560 +++++++++++------- ...field-metadata-v2.integration-spec.ts.snap | 544 ++++++++++------- ...morph-relation-v2.integration-spec.ts.snap | 136 +++-- ...bject-metadata-v2.integration-spec.ts.snap | 168 ++++-- 55 files changed, 1692 insertions(+), 1064 deletions(-) create mode 100644 packages/twenty-server/src/database/typeorm/core/migrations/common/1758038863448-add-universal-identifier-to-index-metadata.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-field-metadata.mock.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/index-metadata-entity-relation-properties.constant.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts delete mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-field-metadata.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts create mode 100644 packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/property-update.type.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-index-test-case.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.ts delete mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type.ts create mode 100644 packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts diff --git a/packages/twenty-server/src/database/typeorm/core/migrations/common/1758038863448-add-universal-identifier-to-index-metadata.ts b/packages/twenty-server/src/database/typeorm/core/migrations/common/1758038863448-add-universal-identifier-to-index-metadata.ts new file mode 100644 index 00000000000..10e30679cae --- /dev/null +++ b/packages/twenty-server/src/database/typeorm/core/migrations/common/1758038863448-add-universal-identifier-to-index-metadata.ts @@ -0,0 +1,25 @@ +import { type MigrationInterface, type QueryRunner } from 'typeorm'; + +export class AddUniversalIdentifierToIndexMetadata1758038863448 + implements MigrationInterface +{ + name = 'AddUniversalIdentifierToIndexMetadata1758038863448'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "core"."indexMetadata" ADD "universalIdentifier" uuid`, + ); + await queryRunner.query( + `CREATE UNIQUE INDEX "IDX_b27c681286ac581f81498c5d4b" ON "core"."indexMetadata" ("workspaceId", "universalIdentifier") `, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `DROP INDEX "core"."IDX_b27c681286ac581f81498c5d4b"`, + ); + await queryRunner.query( + `ALTER TABLE "core"."indexMetadata" DROP COLUMN "universalIdentifier"`, + ); + } +} diff --git a/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts b/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts index 91d8641cd17..1da000e96e7 100644 --- a/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts +++ b/packages/twenty-server/src/engine/core-modules/common/constant/all-flat-entity-maps-properties.constant.ts @@ -4,4 +4,5 @@ export const ALL_FLAT_ENTITY_MAPS_PROPERTIES = [ 'flatObjectMetadataMaps', 'flatViewFieldMaps', 'flatViewMaps', + 'flatIndexMaps', ] as const satisfies (keyof AllFlatEntityMaps)[]; diff --git a/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts b/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts index bb15b85e5e4..ff2980f589e 100644 --- a/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts +++ b/packages/twenty-server/src/engine/core-modules/common/constant/empty-all-flat-entity-maps.constant.ts @@ -6,6 +6,7 @@ export const EMPTY_ALL_FLAT_ENTITY_MAPS = { ...EMPTY_FLAT_ENTITY_MAPS, idByNameSingular: {}, }, + flatIndexMaps: EMPTY_FLAT_ENTITY_MAPS, flatViewFieldMaps: EMPTY_FLAT_ENTITY_MAPS, flatViewMaps: EMPTY_FLAT_ENTITY_MAPS, } as const satisfies AllFlatEntityMaps; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts index 9b6d252d725..0cf3957f7c1 100644 --- a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts +++ b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type.ts @@ -1,5 +1,6 @@ import { type FlatViewField } from 'src/engine/core-modules/view/flat-view/types/flat-view-field.type'; import { type FlatView } from 'src/engine/core-modules/view/flat-view/types/flat-view.type'; +import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; export type AllFlatEntitiesByMetadataEngineName = { @@ -7,4 +8,5 @@ export type AllFlatEntitiesByMetadataEngineName = { objectMetadata: FlatObjectMetadata; view: FlatView; viewField: FlatViewField; + index: FlatIndexMetadata; }; diff --git a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts index b386b446908..c48e4e23114 100644 --- a/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts +++ b/packages/twenty-server/src/engine/core-modules/common/types/all-flat-entity-maps.type.ts @@ -1,13 +1,14 @@ -import { type FlatViewFieldMaps } from 'src/engine/core-modules/view/flat-view/types/flat-view-field-maps.type'; -import { type FlatViewMaps } from 'src/engine/core-modules/view/flat-view/types/flat-view-maps.type'; +import { type AllFlatEntitiesByMetadataEngineName } from 'src/engine/core-modules/common/types/all-flat-entities-by-metadata-engine-name.type'; +import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-object-metadata-maps/types/flat-object-metadata-maps.type'; -export type AllFlatEntityMaps = { +export type AllFlatEntityMaps = Omit< + { + [P in keyof AllFlatEntitiesByMetadataEngineName as `flat${Capitalize

}Maps`]: FlatEntityMaps< + AllFlatEntitiesByMetadataEngineName[P] + >; + }, + 'flatObjectMetadataMaps' +> & { flatObjectMetadataMaps: FlatObjectMetadataMaps; - flatViewMaps: FlatViewMaps; - flatViewFieldMaps: FlatViewFieldMaps; }; - -// export type AllFlatEntityMaps = { -// [P in keyof AllFlatEntities as `${P}Maps`]: FlatEntityMaps; -// }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/throw-on-field-input-transpilations-error.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/throw-on-field-input-transpilations-error.util.ts index 8af6183763e..5ad70832098 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/throw-on-field-input-transpilations-error.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-field-metadata/utils/throw-on-field-input-transpilations-error.util.ts @@ -24,6 +24,7 @@ export const throwOnFieldInputTranspilationsError: ThrowOnFieldInputTranspilatio throw new WorkspaceMigrationBuilderExceptionV2( { report: { + index: [], view: [], viewField: [], objectMetadata: [ diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-field-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-field-metadata.mock.ts deleted file mode 100644 index 911f2b676a3..00000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-field-metadata.mock.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { faker } from '@faker-js/faker'; - -import { type FlatIndexFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata'; - -type FlatIndexFieldMetadataOverrides = Required< - Pick< - FlatIndexFieldMetadata, - 'fieldMetadataId' | 'indexMetadataId' | 'universalIdentifier' - > -> & - Partial; -export const getFlatIndexFieldMetadataMock = ( - overrides: FlatIndexFieldMetadataOverrides, -): FlatIndexFieldMetadata => { - const createdAt = '2024-01-01T00:00:00.000Z' as unknown as Date; - - return { - createdAt, - id: faker.string.uuid(), - order: faker.number.int(), - updatedAt: createdAt, - ...overrides, - }; -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts index 703ad70504d..0d0692d9ccf 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock.ts @@ -17,7 +17,7 @@ export const getFlatIndexMetadataMock = ( createdAt, id: faker.string.uuid(), indexType: IndexType.BTREE, - indexWhereClause: undefined, + indexWhereClause: null, isCustom: false, isUnique: false, name: 'defaultFlatIndexMetadataName', diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts new file mode 100644 index 00000000000..15ba523f966 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant.ts @@ -0,0 +1,9 @@ +import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; + +export const FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE = [ + 'indexType', + 'indexWhereClause', + 'flatIndexFieldMetadatas', + 'isUnique', + 'name', +] as const satisfies (keyof FlatIndexMetadata)[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/index-metadata-entity-relation-properties.constant.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/index-metadata-entity-relation-properties.constant.ts new file mode 100644 index 00000000000..ad063704a91 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/constants/index-metadata-entity-relation-properties.constant.ts @@ -0,0 +1,6 @@ +import { type IndexMetadataRelationProperties } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; + +export const INDEX_METADATA_ENTITY_RELATION_PROPERTIES = [ + 'objectMetadata', + 'indexFieldMetadatas', +] as const satisfies readonly IndexMetadataRelationProperties[]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code.ts new file mode 100644 index 00000000000..338c5a57191 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code.ts @@ -0,0 +1,10 @@ +export enum IndexExceptionCode { + INDEX_EMPTY_FIELDS = 'INDEX_EMPTY_FIELDS', + INDEX_FIELD_NOT_FOUND = 'INDEX_FIELD_NOT_FOUND', + INDEX_FIELD_WRONG_OBJECT = 'INDEX_FIELD_WRONG_OBJECT', + INDEX_FIELD_INVALID_REFERENCE = 'INDEX_FIELD_INVALID_REFERENCE', + INDEX_FIELD_ID_DUPLICATE = 'INDEX_FIELD_ID_DUPLICATE', + INDEX_ALREADY_EXISTS = 'INDEX_ALREADY_EXISTS', + INDEX_NOT_FOUND = 'INDEX_NOT_FOUND', + INDEX_OBJECT_NOT_FOUND = 'INDEX_OBJECT_NOT_FOUND', +} diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts new file mode 100644 index 00000000000..7003b38e957 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/services/workspace-flat-index-map-cache.service.ts @@ -0,0 +1,64 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; + +import { Repository } from 'typeorm'; + +import { InjectCacheStorage } from 'src/engine/core-modules/cache-storage/decorators/cache-storage.decorator'; +import { CacheStorageService } from 'src/engine/core-modules/cache-storage/services/cache-storage.service'; +import { CacheStorageNamespace } from 'src/engine/core-modules/cache-storage/types/cache-storage-namespace.enum'; +import { EMPTY_FLAT_ENTITY_MAPS } from 'src/engine/core-modules/common/constant/empty-flat-entity-maps.constant'; +import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; +import { fromIndexMetadataEntityToFlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util'; +import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; +import { WorkspaceFlatMapCache } from 'src/engine/workspace-flat-map-cache/decorators/workspace-flat-map-cache.decorator'; +import { WorkspaceFlatMapCacheService } from 'src/engine/workspace-flat-map-cache/services/workspace-flat-map-cache.service'; + +@Injectable() +@WorkspaceFlatMapCache('flatIndexMaps') +export class WorkspaceFlatIndexMapCacheService extends WorkspaceFlatMapCacheService< + FlatEntityMaps +> { + constructor( + @InjectCacheStorage(CacheStorageNamespace.EngineWorkspace) + cacheStorageService: CacheStorageService, + @InjectRepository(IndexMetadataEntity) + private readonly indexMetadataRepository: Repository, + ) { + super(cacheStorageService); + } + + protected async computeFlatMap({ + workspaceId, + }: { + workspaceId: string; + }): Promise> { + const indexes = await this.indexMetadataRepository.find({ + where: { + workspaceId, + }, + withDeleted: true, + relations: ['indexFieldMetadatas'], + }); + + const flatIndexMaps = indexes.reduce>( + (flatEntityMaps, index) => { + const flatIndex = fromIndexMetadataEntityToFlatIndexMetadata(index); + + return { + byId: { + ...flatEntityMaps.byId, + [flatIndex.id]: flatIndex, + }, + idByUniversalIdentifier: { + ...flatEntityMaps.idByUniversalIdentifier, + [flatIndex.universalIdentifier]: flatIndex.id, + }, + }; + }, + EMPTY_FLAT_ENTITY_MAPS, + ); + + return flatIndexMaps; + } +} diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-field-metadata.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-field-metadata.type.ts deleted file mode 100644 index edd218ff403..00000000000 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-field-metadata.type.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { type IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; -import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; -import { type MetadataEntitiesRelationTarget } from 'src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type'; - -type IndexFieldMetadataEntityRelationProperties = - ExtractRecordTypeOrmRelationProperties< - IndexFieldMetadataEntity, - MetadataEntitiesRelationTarget - >; - -export type FlatIndexFieldMetadata = Partial< - Omit -> & { - universalIdentifier: string; -}; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts new file mode 100644 index 00000000000..ee3dcd5e4a8 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type.ts @@ -0,0 +1,4 @@ +import { type FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant'; + +export type FlatIndexMetadataPropertiesToCompare = + (typeof FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE)[number]; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts index 5af90a85ccd..3b036d2adbd 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type.ts @@ -1,18 +1,24 @@ +import { type IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; import { type IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; -import { type FlatIndexFieldMetadata } from 'src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata'; import { type MetadataEntitiesRelationTarget } from 'src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type'; -type IndexMetadataRelationProperties = ExtractRecordTypeOrmRelationProperties< - IndexMetadataEntity, - MetadataEntitiesRelationTarget ->; +export type IndexMetadataRelationProperties = + ExtractRecordTypeOrmRelationProperties< + IndexMetadataEntity, + MetadataEntitiesRelationTarget + >; -// TODO prastoin refactor FlatIndexMetadata to not be a Partial extension of IndexMetadataEntity -export type FlatIndexMetadata = Partial< - Omit +export type FlatIndexMetadata = Omit< + IndexMetadataEntity, + IndexMetadataRelationProperties > & { - id: string; - flatIndexFieldMetadatas: FlatIndexFieldMetadata[]; universalIdentifier: string; + flatIndexFieldMetadatas: Omit< + IndexFieldMetadataEntity, + ExtractRecordTypeOrmRelationProperties< + IndexFieldMetadataEntity, + MetadataEntitiesRelationTarget + > + >[]; }; diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts index 5860d4b5dee..08373351339 100644 --- a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util.ts @@ -1,37 +1,32 @@ import diff from 'microdiff'; import { type FromTo } from 'twenty-shared/types'; +import { parseJson } from 'twenty-shared/utils'; +import { FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE } from 'src/engine/metadata-modules/flat-index-metadata/constants/flat-index-metadata-properties-to-compare.constant'; +import { type FlatIndexMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata-properties-to-compare.type'; import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; import { transformMetadataForComparison } from 'src/engine/workspace-manager/workspace-sync-metadata/comparators/utils/transform-metadata-for-comparison.util'; -const flatIndexMetadataPropertiesToCompare = [ - 'flatIndexFieldMetadatas', // Comparing this as whole ? should iterate on each keys ? => TBD should only map over cols as before ? - 'indexType', - 'indexWhereClause', - 'isUnique', - 'name', -] as const satisfies (keyof FlatIndexMetadata)[]; - -type FlatIndexMetadataPropertiesToCompare = - (typeof flatIndexMetadataPropertiesToCompare)[number]; - -// Should also handle indexFieldMetadata comparison ? -/** - * This comparator handles update on colliding universalIdentifier flatIndexMetadata - */ export const compareTwoFlatIndexMetadata = ({ - from, - to, -}: FromTo) => { + fromFlatIndexMetadata, + toFlatIndexMetadata, +}: FromTo) => { const transformOptions = { + propertiesToStringify: ['flatIndexFieldMetadatas'] as const, shouldIgnoreProperty: (property: string) => - !flatIndexMetadataPropertiesToCompare.includes( + !FLAT_INDEX_METADATA_PROPERTIES_TO_COMPARE.includes( property as FlatIndexMetadataPropertiesToCompare, ), }; - const fromCompare = transformMetadataForComparison(from, transformOptions); - const toCompare = transformMetadataForComparison(to, transformOptions); + const fromCompare = transformMetadataForComparison( + fromFlatIndexMetadata, + transformOptions, + ); + const toCompare = transformMetadataForComparison( + toFlatIndexMetadata, + transformOptions, + ); const flatIndexeDifferences = diff(fromCompare, toCompare); @@ -40,17 +35,20 @@ export const compareTwoFlatIndexMetadata = ({ switch (difference.type) { case 'CHANGE': { const { oldValue, path, value } = difference; + const property = path[0] as FlatIndexMetadataPropertiesToCompare; - const property = path[0]; - - if (typeof property === 'number') { - return []; + if (property === 'flatIndexFieldMetadatas') { + return { + from: parseJson(oldValue), + to: parseJson(value), + property, + }; } return { from: oldValue, - property, to: value, + property, }; } case 'CREATE': diff --git a/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts new file mode 100644 index 00000000000..d04abe3abb6 --- /dev/null +++ b/packages/twenty-server/src/engine/metadata-modules/flat-index-metadata/utils/from-index-metadata-entity-to-flat-index-metadata.util.ts @@ -0,0 +1,28 @@ +import { removePropertiesFromRecord } from 'twenty-shared/utils'; + +import { INDEX_METADATA_ENTITY_RELATION_PROPERTIES } from 'src/engine/metadata-modules/flat-index-metadata/constants/index-metadata-entity-relation-properties.constant'; +import { type FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; +import { type IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; + +export const fromIndexMetadataEntityToFlatIndexMetadata = ( + indexMetadataEntity: IndexMetadataEntity, +): FlatIndexMetadata => { + const indexMetadataEntityWithoutRelations = removePropertiesFromRecord( + indexMetadataEntity, + [...INDEX_METADATA_ENTITY_RELATION_PROPERTIES], + ); + + return { + ...indexMetadataEntityWithoutRelations, + universalIdentifier: + indexMetadataEntityWithoutRelations.universalIdentifier ?? + indexMetadataEntityWithoutRelations.id, + flatIndexFieldMetadatas: indexMetadataEntity.indexFieldMetadatas.map( + (indexFieldMetadata) => + removePropertiesFromRecord(indexFieldMetadata, [ + 'indexMetadata', + 'fieldMetadata', + ]), + ), + }; +}; diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-field-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-field-metadata.entity.ts index 40aa8b4910c..ac9b61e1c56 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-field-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-field-metadata.entity.ts @@ -14,7 +14,9 @@ import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/ import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; @Entity('indexFieldMetadata') -export class IndexFieldMetadataEntity { +export class IndexFieldMetadataEntity + implements Required +{ @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts index de41038f087..bd6b38d350a 100644 --- a/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts +++ b/packages/twenty-server/src/engine/metadata-modules/index-metadata/index-metadata.entity.ts @@ -12,6 +12,8 @@ import { UpdateDateColumn, } from 'typeorm'; +import { SyncableEntity } from 'src/engine/workspace-manager/workspace-sync/interfaces/syncable-entity.interface'; + import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; import { IndexType } from 'src/engine/metadata-modules/index-metadata/types/indexType.types'; import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; @@ -26,7 +28,10 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat 'objectMetadataId', ]) @Entity('indexMetadata') -export class IndexMetadataEntity { +export class IndexMetadataEntity + extends SyncableEntity + implements Required +{ @PrimaryGeneratedColumn('uuid') id: string; diff --git a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-index-manager.service.ts b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-index-manager.service.ts index 396fffb7892..5a99162292c 100644 --- a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-index-manager.service.ts +++ b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/services/workspace-schema-index-manager.service.ts @@ -15,48 +15,34 @@ export class WorkspaceSchemaIndexManagerService { tableName: string; index: WorkspaceSchemaIndexDefinition; }): Promise { - try { - const safeSchemaName = removeSqlDDLInjection(schemaName); - const safeTableName = removeSqlDDLInjection(tableName); - const safeIndexName = removeSqlDDLInjection(index.name); + const safeSchemaName = removeSqlDDLInjection(schemaName); + const safeTableName = removeSqlDDLInjection(tableName); + const safeIndexName = removeSqlDDLInjection(index.name); - const quotedColumns = index.columns.map( - (column) => `"${removeSqlDDLInjection(column)}"`, - ); - const isUnique = index.isUnique ? 'UNIQUE' : ''; - const indexType = - index.type && index.type !== 'BTREE' ? `USING ${index.type}` : ''; - const whereClause = index.where ? `WHERE ${index.where}` : ''; // TODO: to sanitize - const includeClause = index.include?.length - ? `INCLUDE (${index.include - .map((col) => `"${removeSqlDDLInjection(col)}"`) - .join(', ')})` - : ''; + const quotedColumns = index.columns.map( + (column) => `"${removeSqlDDLInjection(column)}"`, + ); + const isUnique = index.isUnique ? 'UNIQUE' : ''; + const indexType = + index.type && index.type !== 'BTREE' ? `USING ${index.type}` : ''; + const whereClause = index.where ? `WHERE ${index.where}` : ''; // TODO: to sanitize -> might search for a lib to sanitize sql queries - const sql = [ - 'CREATE', - isUnique && 'UNIQUE', - 'INDEX IF NOT EXISTS', - `"${safeIndexName}"`, - 'ON', - `"${safeSchemaName}"."${safeTableName}"`, - indexType, - `(${quotedColumns.join(', ')})`, - includeClause, - whereClause, - ] - .filter(Boolean) - .join(' ') - .trim(); + const sql = [ + 'CREATE', + isUnique && 'UNIQUE', + 'INDEX IF NOT EXISTS', + `"${safeIndexName}"`, + 'ON', + `"${safeSchemaName}"."${safeTableName}"`, + indexType, + `(${quotedColumns.join(', ')})`, + whereClause, + ] + .filter(Boolean) + .join(' ') + .trim(); - await queryRunner.query(sql); - } catch (error: unknown) { - // Ignore error if index already exists - if (error instanceof Error && 'code' in error && error.code === '42P07') { - return; - } - throw error; - } + await queryRunner.query(sql); } async dropIndex({ @@ -67,80 +53,10 @@ export class WorkspaceSchemaIndexManagerService { queryRunner: QueryRunner; schemaName: string; indexName: string; - }): Promise { - try { - const safeSchemaName = removeSqlDDLInjection(schemaName); - const safeIndexName = removeSqlDDLInjection(indexName); - const sql = `DROP INDEX IF EXISTS "${safeSchemaName}"."${safeIndexName}"`; - - await queryRunner.query(sql); - } catch (error: unknown) { - // Ignore error if index does not exist - if (error instanceof Error && 'code' in error && error.code === '42704') { - return; - } - throw error; - } - } - - async renameIndex({ - queryRunner, - schemaName, - oldIndexName, - newIndexName, - }: { - queryRunner: QueryRunner; - schemaName: string; - oldIndexName: string; - newIndexName: string; }): Promise { const safeSchemaName = removeSqlDDLInjection(schemaName); - const safeOldIndexName = removeSqlDDLInjection(oldIndexName); - const safeNewIndexName = removeSqlDDLInjection(newIndexName); - const sql = `ALTER INDEX "${safeSchemaName}"."${safeOldIndexName}" RENAME TO "${safeNewIndexName}"`; - - await queryRunner.query(sql); - } - - async createUniqueConstraint({ - queryRunner, - schemaName, - tableName, - constraintName, - columnNames, - }: { - queryRunner: QueryRunner; - schemaName: string; - tableName: string; - constraintName: string; - columnNames: string[]; - }): Promise { - const safeSchemaName = removeSqlDDLInjection(schemaName); - const safeTableName = removeSqlDDLInjection(tableName); - const safeConstraintName = removeSqlDDLInjection(constraintName); - const quotedColumns = columnNames - .map((col) => `"${removeSqlDDLInjection(col)}"`) - .join(', '); - const sql = `ALTER TABLE "${safeSchemaName}"."${safeTableName}" ADD CONSTRAINT "${safeConstraintName}" UNIQUE (${quotedColumns})`; - - await queryRunner.query(sql); - } - - async dropUniqueConstraint({ - queryRunner, - schemaName, - tableName, - constraintName, - }: { - queryRunner: QueryRunner; - schemaName: string; - tableName: string; - constraintName: string; - }): Promise { - const safeSchemaName = removeSqlDDLInjection(schemaName); - const safeTableName = removeSqlDDLInjection(tableName); - const safeConstraintName = removeSqlDDLInjection(constraintName); - const sql = `ALTER TABLE "${safeSchemaName}"."${safeTableName}" DROP CONSTRAINT IF EXISTS "${safeConstraintName}"`; + const safeIndexName = removeSqlDDLInjection(indexName); + const sql = `DROP INDEX IF EXISTS "${safeSchemaName}"."${safeIndexName}"`; await queryRunner.query(sql); } diff --git a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-index-definition.type.ts b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-index-definition.type.ts index 7b0a008e9a5..f71db05ef5b 100644 --- a/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-index-definition.type.ts +++ b/packages/twenty-server/src/engine/twenty-orm/workspace-schema-manager/types/workspace-schema-index-definition.type.ts @@ -12,5 +12,4 @@ export type WorkspaceSchemaIndexDefinition = { type?: WorkspaceSchemaIndexType; isUnique?: boolean; where?: string; - include?: string[]; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts index 075dcc665dd..b442bd413fa 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/types/validate-error-response.type.ts @@ -23,7 +23,7 @@ export type ValidationErrorResponse = { summary: { totalErrors: number; } & { - [P in keyof AllFlatEntitiesByMetadataEngineName as `invalid${Capitalize

}s`]: number; + [P in keyof AllFlatEntitiesByMetadataEngineName as `invalid${Capitalize

}`]: number; }; errors: OrchestratorFailureReport; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/utils/from-workspace-migration-builder-exception-to-validation-response-error.util.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/utils/from-workspace-migration-builder-exception-to-validation-response-error.util.ts index c89c56413e3..285bca5ae96 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/utils/from-workspace-migration-builder-exception-to-validation-response-error.util.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/utils/from-workspace-migration-builder-exception-to-validation-response-error.util.ts @@ -6,12 +6,14 @@ export const fromWorkspaceMigrationBuilderExceptionToValidationResponseError = ( ): ValidationErrorResponse => { const emptyResponseError: ValidationErrorResponse = { summary: { - invalidObjectMetadatas: 0, - invalidViews: 0, - invalidViewFields: 0, + invalidObjectMetadata: 0, + invalidView: 0, + invalidViewField: 0, + invalidIndex: 0, totalErrors: 0, }, errors: { + index: [], objectMetadata: [], view: [], viewField: [], diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/workspace-migration-builder-exception-v2-formatter.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/workspace-migration-builder-exception-v2-formatter.ts index 007518331ab..d6265f7c725 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/workspace-migration-builder-exception-v2-formatter.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/interceptors/workspace-migration-builder-exception-v2-formatter.ts @@ -13,14 +13,11 @@ export const workspaceMigrationBuilderExceptionV2Formatter = ( const { errors, summary } = fromWorkspaceMigrationBuilderExceptionToValidationResponseError(error); - const invalidObjects = summary.invalidObjectMetadatas; - const invalidFields = summary.invalidViewFields; - throw new BaseGraphQLError(error.message, ErrorCode.BAD_USER_INPUT, { code: 'METADATA_VALIDATION_ERROR', errors, summary, - message: `Validation failed for ${invalidObjects} object(s) and ${invalidFields} field(s)`, - userFriendlyMessage: t`Validation failed for ${invalidObjects} object(s) and ${invalidFields} field(s)`, + message: `Validation failed for 0 object(s) and 0 field(s)`, + userFriendlyMessage: t`Validation failed for 0 object(s) and 0 field(s)`, }); }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts index e2c5b180c83..14cd18a0a9d 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/services/workspace-migration-build-orchestrator.service.ts @@ -10,6 +10,7 @@ import { WorkspaceMigrationOrchestratorFailedResult, WorkspaceMigrationOrchestratorSuccessfulResult, } from 'src/engine/workspace-manager/workspace-migration-v2/types/workspace-migration-orchestrator.type'; +import { WorkspaceMigrationV2IndexActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service'; import { WorkspaceMigrationV2ViewFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service'; import { WorkspaceMigrationV2ViewActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service'; import { WorkspaceMigrationBuilderV2Service } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service'; @@ -23,11 +24,11 @@ export class WorkspaceMigrationBuildOrchestratorService { constructor( private readonly workspaceMigrationBuilderV2Service: WorkspaceMigrationBuilderV2Service, + private readonly workspaceMigrationV2IndexActionsBuilderService: WorkspaceMigrationV2IndexActionsBuilderService, private readonly workspaceMigrationV2ViewActionsBuilderService: WorkspaceMigrationV2ViewActionsBuilderService, private readonly workspaceMigrationV2ViewFieldActionsBuilderService: WorkspaceMigrationV2ViewFieldActionsBuilderService, ) {} - // This does not handle dependency maps correctly private setupOptimisticCache({ fromToAllFlatEntityMaps, dependencyAllFlatEntityMaps, @@ -73,14 +74,19 @@ export class WorkspaceMigrationBuildOrchestratorService { objectMetadata: [], view: [], viewField: [], + index: [], }; const optimisticAllFlatEntityMaps = this.setupOptimisticCache({ fromToAllFlatEntityMaps, dependencyAllFlatEntityMaps, }); - const { flatObjectMetadataMaps, flatViewFieldMaps, flatViewMaps } = - fromToAllFlatEntityMaps; + const { + flatObjectMetadataMaps, + flatViewFieldMaps, + flatViewMaps, + flatIndexMaps, + } = fromToAllFlatEntityMaps; if (isDefined(flatObjectMetadataMaps)) { const { from: fromFlatObjectMetadataMaps, to: toFlatObjectMetadataMaps } = @@ -104,6 +110,31 @@ export class WorkspaceMigrationBuildOrchestratorService { } } + if (isDefined(flatIndexMaps)) { + const { from: fromFlatIndexMaps, to: toFlatIndexMaps } = flatIndexMaps; + const indexResult = + await this.workspaceMigrationV2IndexActionsBuilderService.validateAndBuild( + { + from: fromFlatIndexMaps, + to: toFlatIndexMaps, + buildOptions, + dependencyOptimisticFlatEntityMaps: { + flatObjectMetadataMaps: + optimisticAllFlatEntityMaps.flatObjectMetadataMaps, + }, + }, + ); + + optimisticAllFlatEntityMaps.flatIndexMaps = + indexResult.optimisticFlatEntityMaps; + + if (indexResult.status === 'fail') { + orchestratorFailureReport.index.push(...indexResult.errors); + } else { + allActions.push(...indexResult.actions); + } + } + if (isDefined(flatViewMaps)) { const { from: fromFlatViewMaps, to: toFlatViewMaps } = flatViewMaps; const viewResult = diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata.ts deleted file mode 100644 index edd218ff403..00000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/flat-index-field-metadata.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { type IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity'; -import { type ExtractRecordTypeOrmRelationProperties } from 'src/engine/workspace-manager/workspace-migration-v2/types/extract-record-typeorm-relation-properties.type'; -import { type MetadataEntitiesRelationTarget } from 'src/engine/workspace-manager/workspace-migration-v2/types/metadata-entities-relation-targets.type'; - -type IndexFieldMetadataEntityRelationProperties = - ExtractRecordTypeOrmRelationProperties< - IndexFieldMetadataEntity, - MetadataEntitiesRelationTarget - >; - -export type FlatIndexFieldMetadata = Partial< - Omit -> & { - universalIdentifier: string; -}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/property-update.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/property-update.type.ts new file mode 100644 index 00000000000..f0bc67c216e --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/types/property-update.type.ts @@ -0,0 +1,5 @@ +import { type FromTo } from 'twenty-shared/types'; + +export type PropertyUpdate = { + property: P; +} & FromTo; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap index 0bde343ccb8..626930b4e3e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/__snapshots__/workspace-migration-builder.spec.ts.snap @@ -342,65 +342,6 @@ exports[`Workspace migration builder field actions test suite It should build an exports[`Workspace migration builder field actions test suite It should not infer any actions as from and to fields are identical 1`] = `[]`; -exports[`Workspace migration builder index actions test suite It should build a delete_index action 1`] = ` -[ - { - "flatIndexMetadataId": Any, - "type": "delete_index", - }, -] -`; - -exports[`Workspace migration builder index actions test suite It should build an create_index action 1`] = ` -[ - { - "flatIndexMetadata": { - "createdAt": Any, - "flatIndexFieldMetadatas": [], - "id": Any, - "indexType": "BTREE", - "indexWhereClause": undefined, - "isCustom": false, - "isUnique": false, - "name": "defaultFlatIndexMetadataName", - "objectMetadataId": Any, - "universalIdentifier": Any, - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_index", - }, -] -`; - -exports[`Workspace migration builder index actions test suite It should build an delete_index and a create_index action ( the way we handle update ) 1`] = ` -[ - { - "flatIndexMetadataId": Any, - "type": "delete_index", - }, - { - "flatIndexMetadata": { - "createdAt": Any, - "flatIndexFieldMetadatas": [], - "id": Any, - "indexType": "BTREE", - "indexWhereClause": "new index where clause", - "isCustom": false, - "isUnique": false, - "name": "new index name", - "objectMetadataId": Any, - "universalIdentifier": Any, - "updatedAt": Any, - "workspaceId": Any, - }, - "type": "create_index", - }, -] -`; - -exports[`Workspace migration builder index actions test suite It should not infer any actions as from and to indexes are identical 1`] = `[]`; - exports[`Workspace migration builder object actions test suite It should build a create_object action with custom object 1`] = ` [ { @@ -2981,7 +2922,7 @@ exports[`Workspace migration builder object actions test suite It should build a "flatIndexFieldMetadatas": [], "id": Any, "indexType": "BTREE", - "indexWhereClause": undefined, + "indexWhereClause": null, "isCustom": false, "isUnique": false, "name": "defaultFlatIndexMetadataName", diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-index-test-case.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-index-test-case.ts deleted file mode 100644 index 4bb852c3d8d..00000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-index-test-case.ts +++ /dev/null @@ -1,113 +0,0 @@ -import { getFlatIndexMetadataMock } from 'src/engine/metadata-modules/flat-index-metadata/__mocks__/get-flat-index-metadata.mock'; -import { FLAT_OBJECT_METADATA_MAPS_MOCKS } from 'src/engine/metadata-modules/flat-object-metadata-maps/mocks/flat-object-metadata-maps.mock'; -import { replaceFlatObjectMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/replace-flat-object-metadata-in-flat-object-metadata-maps-or-throw.util'; -import { getFlatObjectMetadataMock } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/get-flat-object-metadata.mock'; -import { NOTE_FLAT_OBJECT_MOCK } from 'src/engine/metadata-modules/flat-object-metadata/__mocks__/note-flat-object.mock'; -import { type WorkspaceMigrationBuilderTestCase } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/types/workspace-migration-builder-test-case.type'; - -export const WORKSPACE_MIGRATION_INDEX_BUILDER_TEST_CASES: WorkspaceMigrationBuilderTestCase[] = - [ - { - title: 'It should build an create_index action', - context: { - input: { - fromFlatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - toFlatObjectMetadataMaps: - replaceFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ - flatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - flatObjectMetadata: getFlatObjectMetadataMock({ - ...NOTE_FLAT_OBJECT_MOCK, - flatIndexMetadatas: [ - getFlatIndexMetadataMock({ - objectMetadataId: NOTE_FLAT_OBJECT_MOCK.id, - universalIdentifier: 'field-metadata-unique-identifier-1', - }), - ], - }), - }), - }, - expectedActionsTypeCounter: { - createIndex: 1, - }, - }, - }, - { - title: - 'It should build an delete_index and a create_index action ( the way we handle update )', - context: { - input: () => { - const flatIndexMetadata = getFlatIndexMetadataMock({ - objectMetadataId: NOTE_FLAT_OBJECT_MOCK.id, - universalIdentifier: 'field-metadata-unique-identifier-1', - }); - const fromFlatObjectMetadataMaps = - replaceFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ - flatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - flatObjectMetadata: getFlatObjectMetadataMock({ - ...NOTE_FLAT_OBJECT_MOCK, - flatIndexMetadatas: [flatIndexMetadata], - }), - }); - const toFlatObjectMetadataMaps = - replaceFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ - flatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - flatObjectMetadata: getFlatObjectMetadataMock({ - ...NOTE_FLAT_OBJECT_MOCK, - flatIndexMetadatas: [ - { - ...flatIndexMetadata, - name: 'new index name', - isUnique: false, - indexWhereClause: 'new index where clause', - universalIdentifier: 'field-metadata-unique-identifier-1', - }, - ], - }), - }); - - return { - fromFlatObjectMetadataMaps, - toFlatObjectMetadataMaps, - }; - }, - expectedActionsTypeCounter: { - createIndex: 1, - deleteIndex: 1, - }, - }, - }, - { - title: 'It should build a delete_index action', - context: { - input: { - fromFlatObjectMetadataMaps: - replaceFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ - flatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - flatObjectMetadata: getFlatObjectMetadataMock({ - ...NOTE_FLAT_OBJECT_MOCK, - flatIndexMetadatas: [ - getFlatIndexMetadataMock({ - objectMetadataId: NOTE_FLAT_OBJECT_MOCK.id, - universalIdentifier: 'field-metadata-unique-identifier-1', - }), - ], - }), - }), - toFlatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - }, - expectedActionsTypeCounter: { - deleteIndex: 1, - }, - }, - }, - { - title: - 'It should not infer any actions as from and to indexes are identical', - context: { - input: { - fromFlatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - toFlatObjectMetadataMaps: FLAT_OBJECT_METADATA_MAPS_MOCKS, - }, - }, - }, - ]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts index d595a5c6dd3..2ed03184ec4 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/workspace-migration-builder.spec.ts @@ -7,7 +7,6 @@ import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modul import { FlatFieldMetadataValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service'; import { FlatObjectMetadataValidatorService } from 'src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service'; import { WORKSPACE_MIGRATION_FIELD_BUILDER_TEST_CASES } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-field-test-case'; -import { WORKSPACE_MIGRATION_INDEX_BUILDER_TEST_CASES } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-index-test-case'; import { WORKSPACE_MIGRATION_OBJECT_BUILDER_TEST_CASES } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/__tests__/common/workspace-migration-builder-object-test-case'; import { type CamelCasedWorkspaceMigrationActionsType, @@ -31,10 +30,6 @@ const allWorkspaceBuilderTestCases: { label: 'field', testCases: WORKSPACE_MIGRATION_FIELD_BUILDER_TEST_CASES, }, - { - label: 'index', - testCases: WORKSPACE_MIGRATION_INDEX_BUILDER_TEST_CASES, - }, ]; // TODO prastoin add coverage to infer deletion from missing entities diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts new file mode 100644 index 00000000000..7d5d02f93f1 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service.ts @@ -0,0 +1,160 @@ +import { Injectable } from '@nestjs/common'; + +import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; +import { compareTwoFlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util'; +import { + FlatEntityUpdateValidationArgs, + FlatEntityValidationArgs, + FlatEntityValidationReturnType, + WorkspaceEntityMigrationBuilderV2Service, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service'; +import { WorkspaceMigrationIndexActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; +import { + getWorkspaceMigrationV2CreateIndexAction, + getWorkspaceMigrationV2DeleteIndexAction, +} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-index-actions'; +import { FlatIndexValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service'; + +export type IndexRelatedFlatEntityMaps = Pick< + AllFlatEntityMaps, + 'flatObjectMetadataMaps' +>; +@Injectable() +export class WorkspaceMigrationV2IndexActionsBuilderService extends WorkspaceEntityMigrationBuilderV2Service< + FlatIndexMetadata, + WorkspaceMigrationIndexActionV2, + IndexRelatedFlatEntityMaps +> { + constructor( + private readonly flatIndexValidatorService: FlatIndexValidatorService, + ) { + super(); + } + + protected async validateFlatEntityCreation({ + dependencyOptimisticFlatEntityMaps, + flatEntityToValidate: flatIndexToValidate, + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + }: FlatEntityValidationArgs< + FlatIndexMetadata, + IndexRelatedFlatEntityMaps + >): Promise< + FlatEntityValidationReturnType< + WorkspaceMigrationIndexActionV2, + FlatIndexMetadata + > + > { + const validationResult = + this.flatIndexValidatorService.validateFlatIndexCreation({ + dependencyOptimisticFlatEntityMaps, + flatIndexToValidate, + optimisticFlatIndexMaps, + }); + + if (validationResult.errors.length > 0) { + return { + status: 'fail', + ...validationResult, + }; + } + + return { + status: 'success', + action: getWorkspaceMigrationV2CreateIndexAction(flatIndexToValidate), + }; + } + + protected async validateFlatEntityDeletion({ + dependencyOptimisticFlatEntityMaps, + flatEntityToValidate: flatIndexToValidate, + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + }: FlatEntityValidationArgs< + FlatIndexMetadata, + IndexRelatedFlatEntityMaps + >): Promise< + FlatEntityValidationReturnType< + WorkspaceMigrationIndexActionV2, + FlatIndexMetadata + > + > { + const validationResult = + this.flatIndexValidatorService.validateFlatIndexDeletion({ + dependencyOptimisticFlatEntityMaps, + flatIndexToValidate, + optimisticFlatIndexMaps, + }); + + if (validationResult.errors.length > 0) { + return { + status: 'fail', + ...validationResult, + }; + } + + return { + status: 'success', + action: getWorkspaceMigrationV2DeleteIndexAction(flatIndexToValidate), + }; + } + + protected async validateFlatEntityUpdate({ + dependencyOptimisticFlatEntityMaps, + flatEntityUpdate: { from: fromFlatIndex, to: toFlatIndex }, + optimisticFlatEntityMaps: optimisticFlatIndexMaps, + }: FlatEntityUpdateValidationArgs< + FlatIndexMetadata, + IndexRelatedFlatEntityMaps + >): Promise< + | FlatEntityValidationReturnType< + WorkspaceMigrationIndexActionV2, + FlatIndexMetadata + > + | undefined + > { + const indexUpdatedProperties = compareTwoFlatIndexMetadata({ + fromFlatIndexMetadata: fromFlatIndex, + toFlatIndexMetadata: toFlatIndex, + }); + + if (indexUpdatedProperties.length === 0) { + return undefined; + } + + const deletionValidationResult = + this.flatIndexValidatorService.validateFlatIndexDeletion({ + dependencyOptimisticFlatEntityMaps, + flatIndexToValidate: fromFlatIndex, + optimisticFlatIndexMaps, + }); + + if (deletionValidationResult.errors.length > 0) { + return { + status: 'fail', + ...deletionValidationResult, + }; + } + + const creationValidationResult = + this.flatIndexValidatorService.validateFlatIndexCreation({ + dependencyOptimisticFlatEntityMaps, + flatIndexToValidate: toFlatIndex, + optimisticFlatIndexMaps, + }); + + if (creationValidationResult.errors.length > 0) { + return { + status: 'fail', + ...creationValidationResult, + }; + } + + return { + status: 'success', + action: [ + getWorkspaceMigrationV2DeleteIndexAction(fromFlatIndex), + getWorkspaceMigrationV2CreateIndexAction(toFlatIndex), + ], + }; + } +} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.ts deleted file mode 100644 index 6ae8c542dc3..00000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { compareTwoFlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/utils/compare-two-flat-index-metadata.util'; -import { type WorkspaceMigrationIndexActionV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; -import { type UpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-index-matrix.util'; -import { - getWorkspaceMigrationV2CreateIndexAction, - getWorkspaceMigrationV2DeleteIndexAction, -} from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-index-actions'; - -type BuildWorkspaceMigrationIndexActionsArgs = { - objectMetadataDeletedCreatedUpdatedIndex: UpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix[]; - inferDeletionFromMissingObjectFieldIndex: boolean; -}; -export const buildWorkspaceMigrationIndexActions = ({ - inferDeletionFromMissingObjectFieldIndex, - objectMetadataDeletedCreatedUpdatedIndex, -}: BuildWorkspaceMigrationIndexActionsArgs): WorkspaceMigrationIndexActionV2[] => { - let allUpdatedObjectMetadataIndexActions: WorkspaceMigrationIndexActionV2[] = - []; - - for (const { - createdIndexMetadata, - deletedIndexMetadata, - updatedIndexMetadata, - } of objectMetadataDeletedCreatedUpdatedIndex) { - const updatedDeleteAndCreateIndexActions = - updatedIndexMetadata.flatMap( - ({ to, from }) => { - const updates = compareTwoFlatIndexMetadata({ from, to }); - - if (updates.length === 0) { - return []; - } - - return [ - getWorkspaceMigrationV2DeleteIndexAction(from), - getWorkspaceMigrationV2CreateIndexAction(to), - ]; - }, - ); - - const createIndexActions = createdIndexMetadata.map( - getWorkspaceMigrationV2CreateIndexAction, - ); - const deleteIndexActions = inferDeletionFromMissingObjectFieldIndex - ? deletedIndexMetadata.map(getWorkspaceMigrationV2DeleteIndexAction) - : []; - - allUpdatedObjectMetadataIndexActions = - allUpdatedObjectMetadataIndexActions.concat([ - ...createIndexActions, - ...deleteIndexActions, - ...updatedDeleteAndCreateIndexActions, - ]); - } - - return allUpdatedObjectMetadataIndexActions; -}; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts index 1d619fbf45d..92ed1efd98c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type.ts @@ -8,6 +8,7 @@ export type FlatEntityValidationError = { value?: unknown; }; +// Should be improved to be scoped to a given set of actions export type FailedFlatEntityValidation = { type: WorkspaceMigrationActionTypeV2; errors: FlatEntityValidationError[]; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts index 05a905f7010..ef80d0ea56f 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-entity-migration-builder-v2.service.ts @@ -1,6 +1,7 @@ import { type FromTo } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; +import { type AllFlatEntities } from 'src/engine/core-modules/common/types/all-flat-entities.type'; import { type AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; import { type FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; import { type FlatEntity } from 'src/engine/core-modules/common/types/flat-entity.type'; @@ -86,14 +87,14 @@ export type FlatEntityValidationReturnType< > = | { status: 'success'; - action: TActions; + action: TActions | TActions[]; } | ({ status: 'fail'; } & FailedFlatEntityValidation); export abstract class WorkspaceEntityMigrationBuilderV2Service< - TFlatEntity extends FlatEntity, + TFlatEntity extends AllFlatEntities, TActions extends WorkspaceMigrationActionV2, TRelatedFlatEntityMaps extends Partial, > { @@ -147,7 +148,11 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< flatEntityMaps: optimisticFlatEntityMaps, }); - validateAndBuildResult.created.push(validationResult.action); + validateAndBuildResult.created.push( + ...(Array.isArray(validationResult.action) + ? validationResult.action + : [validationResult.action]), + ); } for (const flatEntityToDelete of buildOptions.inferDeletionFromMissingEntities @@ -169,7 +174,11 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< flatEntityMaps: optimisticFlatEntityMaps, }); - validateAndBuildResult.deleted.push(validationResult.action); + validateAndBuildResult.deleted.push( + ...(Array.isArray(validationResult.action) + ? validationResult.action + : [validationResult.action]), + ); } for (const flatEntityUpdate of updated) { @@ -193,7 +202,11 @@ export abstract class WorkspaceEntityMigrationBuilderV2Service< flatEntityMaps: optimisticFlatEntityMaps, }); - validateAndBuildResult.updated.push(validationResult.action); + validateAndBuildResult.updated.push( + ...(Array.isArray(validationResult.action) + ? validationResult.action + : [validationResult.action]), + ); } if (validateAndBuildResult.failed.length > 0) { diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts index e444774a492..9744b7cdd74 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/services/workspace-migration-builder-v2.service.ts @@ -7,12 +7,10 @@ import { type FlatObjectMetadataMaps } from 'src/engine/metadata-modules/flat-ob import { fromFlatObjectMetadataMapsToFlatObjectMetadatas } from 'src/engine/metadata-modules/flat-object-metadata/utils/from-flat-object-metadata-maps-to-flat-object-metadatas.util'; import { deletedCreatedUpdatedMatrixDispatcher } from 'src/engine/workspace-manager/workspace-migration-v2/utils/deleted-created-updated-matrix-dispatcher.util'; import { WorkspaceMigrationV2FieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service'; -import { buildWorkspaceMigrationIndexActions } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder'; import { WorkspaceMigrationV2ObjectActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/services/workspace-migration-v2-object-actions-builder.service'; import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; import { WorkspaceMigrationV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-v2'; import { computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-field-matrix.util'; -import { computeUpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/compute-updated-object-metadata-deleted-created-updated-index-matrix.util'; import { getWorkspaceMigrationV2CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/get-workspace-migration-v2-index-actions'; export type WorkspaceMigrationV2BuilderOptions = { @@ -70,12 +68,6 @@ export class WorkspaceMigrationBuilderV2Service { to: toFlatObjectMetadatas, }); - // Should be handled separately from objects - const objectMetadataDeletedCreatedUpdatedIndex = - computeUpdatedObjectMetadataDeletedCreatedUpdatedIndexMatrix( - updatedFlatObjectMetadatas, - ); - // Should be handled separately from objects const objectMetadataDeletedCreatedUpdatedFields = computeUpdatedObjectMetadataDeletedCreatedUpdatedFieldMatrix( @@ -114,12 +106,6 @@ export class WorkspaceMigrationBuilderV2Service { ), ); - const indexWorkspaceMigrationActions = buildWorkspaceMigrationIndexActions({ - objectMetadataDeletedCreatedUpdatedIndex, - inferDeletionFromMissingObjectFieldIndex: - buildOptions.inferDeletionFromMissingEntities, - }); - const allValidateAndBuildResultFailures = [ ...objectActionsValidateAndBuildResult.failed, ...fieldActionsValidateAndBuildResult.failed, @@ -146,7 +132,6 @@ export class WorkspaceMigrationBuilderV2Service { ...fieldActionsValidateAndBuildResult.created, // Should be handled separately from objects ...fieldActionsValidateAndBuildResult.updated, // Should be handled separately from objects ...createdObjectMetadataCreateIndexActions, - ...indexWorkspaceMigrationActions, // Should be handled separately from objects ], }, optimisticFlatObjectMetadataMaps: diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type.ts deleted file mode 100644 index 8e1f1c33448..00000000000 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { type FieldMetadataType, type FromTo } from 'twenty-shared/types'; - -import { type FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity'; -import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; - -export type FlatFieldMetadataPropertyUpdate< - P extends FlatFieldMetadataPropertiesToCompare, - T extends FieldMetadataType = FieldMetadataType, -> = { - property: P; -} & FromTo[P]>; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts index 2c111cfb11f..b3cd6933e7e 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-action-common-v2.ts @@ -10,7 +10,6 @@ export type WorkspaceMigrationActionV2 = | WorkspaceMigrationIndexActionV2 | WorkspaceMigrationViewActionV2 | WorkspaceMigrationViewFieldActionV2; - export type WorkspaceMigrationActionTypeV2 = WorkspaceMigrationActionV2['type']; export type ExtractAction = Extract< diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts index 4901155fee9..099714666b3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2.ts @@ -1,6 +1,6 @@ import { type FlatFieldMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata-properties-to-compare.type'; import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type'; -import { type FlatFieldMetadataPropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type'; +import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; export type CreateFieldAction = { type: 'create_field'; @@ -14,7 +14,10 @@ export type UpdateFieldAction = { objectMetadataId: string; updates: Array< { - [P in FlatFieldMetadataPropertiesToCompare]: FlatFieldMetadataPropertyUpdate

; + [P in FlatFieldMetadataPropertiesToCompare]: PropertyUpdate< + FlatFieldMetadata, + P + >; }[FlatFieldMetadataPropertiesToCompare] >; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts index fa192e11df4..c1a2e8339cd 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-object-action-v2.ts @@ -1,8 +1,9 @@ -import { type FromTo } from 'twenty-shared/types'; - import { type FlatObjectMetadataPropertiesToCompare } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata-properties-to-compare.type'; -import { type FlatObjectMetadataWithoutFields } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; -import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity'; +import { + type FlatObjectMetadata, + type FlatObjectMetadataWithoutFields, +} from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type'; +import { type PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; import { type CreateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; export type CreateObjectAction = { @@ -16,9 +17,10 @@ export type UpdateObjectAction = { objectMetadataId: string; updates: Array< { - [P in FlatObjectMetadataPropertiesToCompare]: { - property: P; - } & FromTo; + [P in FlatObjectMetadataPropertiesToCompare]: PropertyUpdate< + FlatObjectMetadata, + P + >; }[FlatObjectMetadataPropertiesToCompare] >; }; diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts new file mode 100644 index 00000000000..b30ac218a85 --- /dev/null +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service.ts @@ -0,0 +1,168 @@ +import { Injectable } from '@nestjs/common'; + +import { t } from '@lingui/core/macro'; +import { isDefined } from 'twenty-shared/utils'; + +import { FlatEntityMapsExceptionCode } from 'src/engine/core-modules/common/exceptions/flat-entity-maps.exception'; +import { FlatEntityMaps } from 'src/engine/core-modules/common/types/flat-entity-maps.type'; +import { findFlatEntityByIdInFlatEntityMaps } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps.util'; +import { IndexExceptionCode } from 'src/engine/metadata-modules/flat-index-metadata/exceptions/index-exception-code'; +import { FlatIndexMetadata } from 'src/engine/metadata-modules/flat-index-metadata/types/flat-index-metadata.type'; +import { findFlatFieldMetadataInFlatObjectMetadataMapsWithOnlyFieldId } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-field-metadata-in-flat-object-metadata-maps-with-field-id-only.util'; +import { IndexRelatedFlatEntityMaps } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service'; +import { FailedFlatEntityValidation } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/types/failed-flat-entity-validation.type'; + +type IndexValidationArgs = { + flatIndexToValidate: FlatIndexMetadata; + optimisticFlatIndexMaps: FlatEntityMaps; + dependencyOptimisticFlatEntityMaps: IndexRelatedFlatEntityMaps; +}; +@Injectable() +export class FlatIndexValidatorService { + public validateFlatIndexDeletion({ + optimisticFlatIndexMaps, + flatIndexToValidate: { id: indexIdToDelete }, + }: IndexValidationArgs): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'delete_index', + errors: [], + flatEntityMinimalInformation: { + id: indexIdToDelete, + }, + }; + + const existingFlatIndexToDelete = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId: indexIdToDelete, + flatEntityMaps: optimisticFlatIndexMaps, + }); + + if (!isDefined(existingFlatIndexToDelete)) { + validationResult.errors.push({ + code: FlatEntityMapsExceptionCode.ENTITY_NOT_FOUND, + message: t`Index to delete not found`, + }); + } + + return validationResult; + } + + public validateFlatIndexCreation({ + flatIndexToValidate, + optimisticFlatIndexMaps, + dependencyOptimisticFlatEntityMaps: { flatObjectMetadataMaps }, + }: { + flatIndexToValidate: FlatIndexMetadata; + optimisticFlatIndexMaps: FlatEntityMaps; + dependencyOptimisticFlatEntityMaps: IndexRelatedFlatEntityMaps; + }): FailedFlatEntityValidation { + const validationResult: FailedFlatEntityValidation = { + type: 'create_index', + errors: [], + flatEntityMinimalInformation: { + id: flatIndexToValidate.id, + name: flatIndexToValidate.name, + }, + }; + + const existingFlatIndex = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId: flatIndexToValidate.id, + flatEntityMaps: optimisticFlatIndexMaps, + }); + + if (isDefined(existingFlatIndex)) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_ALREADY_EXISTS, + message: t`Index with same id already exists`, + userFriendlyMessage: t`Index already exists`, + }); + } + + const relatedObjectMetadata = findFlatEntityByIdInFlatEntityMaps({ + flatEntityId: flatIndexToValidate.objectMetadataId, + flatEntityMaps: flatObjectMetadataMaps, + }); + + if (!isDefined(relatedObjectMetadata)) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_OBJECT_NOT_FOUND, + message: t`Could not find index related object metadata`, + userFriendlyMessage: t`Index related object not found`, + }); + } + + const allExistingFlatIndex = Object.values( + optimisticFlatIndexMaps.byId, + ).filter(isDefined); + + const existingFlatIndexOnName = allExistingFlatIndex.some( + (flatIndexMetadata) => + flatIndexMetadata.name.toLocaleUpperCase() === + flatIndexToValidate.name.toLocaleUpperCase(), + ); + + if (isDefined(existingFlatIndexOnName)) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_EMPTY_FIELDS, + message: t`Index with same name already exists`, + userFriendlyMessage: t`Index with same name already exists`, + }); + } + + if (flatIndexToValidate.flatIndexFieldMetadatas.length === 0) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_EMPTY_FIELDS, + message: t`Index must have at least one field`, + userFriendlyMessage: t`An index must contain at least one field`, + }); + } else { + flatIndexToValidate.flatIndexFieldMetadatas.forEach((flatIndexField) => { + const relatedFlatField = + findFlatFieldMetadataInFlatObjectMetadataMapsWithOnlyFieldId({ + fieldMetadataId: flatIndexField.fieldMetadataId, + flatObjectMetadataMaps, + }); + + if (!isDefined(relatedFlatField)) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_FIELD_NOT_FOUND, + message: t`Could not find index field related field metadata`, + userFriendlyMessage: t`Field referenced in index does not exist`, + }); + } else { + if ( + relatedFlatField.objectMetadataId !== + flatIndexToValidate.objectMetadataId + ) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_FIELD_WRONG_OBJECT, + message: t`Field does not belong to the indexed object`, + userFriendlyMessage: t`Field cannot be indexed as it belongs to a different object`, + }); + } + } + + if (flatIndexField.indexMetadataId !== flatIndexToValidate.id) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_FIELD_INVALID_REFERENCE, + message: t`Index field references incorrect index metadata`, + userFriendlyMessage: t`Index field has an invalid reference`, + }); + } + + if ( + allExistingFlatIndex.some(({ flatIndexFieldMetadatas }) => + flatIndexFieldMetadatas.some(({ id }) => id === flatIndexField.id), + ) + ) { + validationResult.errors.push({ + code: IndexExceptionCode.INDEX_FIELD_ID_DUPLICATE, + message: t`Index field ID already exists in another index`, + userFriendlyMessage: t`Field ID is already used in another index`, + }); + } + }); + } + + return validationResult; + } +} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/workspace-migration-builder-validators.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/workspace-migration-builder-validators.module.ts index a404b86b5ac..f4dabdb385c 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/workspace-migration-builder-validators.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/workspace-migration-builder-validators.module.ts @@ -1,10 +1,19 @@ import { Module } from '@nestjs/common'; +import { FlatIndexValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-index-metadata-validator.service'; import { FlatViewFieldValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-field-validator.service'; import { FlatViewValidatorService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/validators/services/flat-view-validator.service'; @Module({ - providers: [FlatViewValidatorService, FlatViewFieldValidatorService], - exports: [FlatViewValidatorService, FlatViewFieldValidatorService], + providers: [ + FlatViewValidatorService, + FlatViewFieldValidatorService, + FlatIndexValidatorService, + ], + exports: [ + FlatViewValidatorService, + FlatViewFieldValidatorService, + FlatIndexValidatorService, + ], }) export class WorkspaceMigrationBuilderValidatorsModule {} diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.module.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.module.ts index c6d1bc3b7ec..5a0f1d77000 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.module.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/workspace-migration-builder-v2.module.ts @@ -5,6 +5,7 @@ import { FlatFieldMetadataTypeValidatorService } from 'src/engine/metadata-modul import { FlatFieldMetadataValidatorService } from 'src/engine/metadata-modules/flat-field-metadata/services/flat-field-metadata-validator.service'; import { FlatObjectMetadataValidatorService } from 'src/engine/metadata-modules/flat-object-metadata/services/flat-object-metadata-validator.service'; import { WorkspaceMigrationV2FieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/field/services/workspace-migration-v2-field-actions-builder.service'; +import { WorkspaceMigrationV2IndexActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/index/workspace-migration-v2-index-actions-builder.service'; import { WorkspaceMigrationV2ObjectActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/object/services/workspace-migration-v2-object-actions-builder.service'; import { WorkspaceMigrationV2ViewFieldActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view-field/workspace-migration-v2-view-field-actions-builder.service'; import { WorkspaceMigrationV2ViewActionsBuilderService } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/builders/view/workspace-migration-v2-view-actions-builder.service'; @@ -24,12 +25,14 @@ import { WorkspaceMigrationBuilderValidatorsModule } from 'src/engine/workspace- WorkspaceMigrationV2FieldActionsBuilderService, WorkspaceMigrationV2ViewActionsBuilderService, WorkspaceMigrationV2ViewFieldActionsBuilderService, + WorkspaceMigrationV2IndexActionsBuilderService, FlatViewValidatorService, FlatViewFieldValidatorService, ], exports: [ WorkspaceMigrationBuilderV2Service, WorkspaceMigrationV2ViewActionsBuilderService, + WorkspaceMigrationV2IndexActionsBuilderService, FlatViewValidatorService, WorkspaceMigrationV2ViewFieldActionsBuilderService, FlatViewFieldValidatorService, diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts index 9cd3b648510..59226368ef3 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/create-field-action-handler.service.ts @@ -57,7 +57,7 @@ export class CreateFieldActionHandlerService extends WorkspaceMigrationRunnerAct const { flatFieldMetadata } = action; - await fieldMetadataRepository.save(flatFieldMetadata); + await fieldMetadataRepository.insert(flatFieldMetadata); } async executeForWorkspaceSchema( diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts index f99fab32e9e..8fe666a8b0a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/field/services/update-field-action-handler.service.ts @@ -29,7 +29,7 @@ import { fromFlatObjectMetadataWithFlatFieldMapsToFlatObjectMetadata } from 'src import { fieldMetadataTypeToColumnType } from 'src/engine/metadata-modules/workspace-migration/utils/field-metadata-type-to-column-type.util'; import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { isMorphOrRelationFieldMetadataType } from 'src/engine/utils/is-morph-or-relation-field-metadata-type.util'; -import { FlatFieldMetadataPropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/flat-field-metadata-property-update.type'; +import { PropertyUpdate } from 'src/engine/workspace-manager/workspace-migration-v2/types/property-update.type'; import { type UpdateFieldAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-field-action-v2'; import { serializeDefaultValueV2 } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/utils/serialize-default-value-v2.util'; import { @@ -54,7 +54,7 @@ type UpdateFieldPropertyUpdateHandlerArgs< schemaName: string; tableName: string; flatFieldMetadata: FlatFieldMetadata; - update: FlatFieldMetadataPropertyUpdate; + update: PropertyUpdate, P>; }; @Injectable() @@ -199,9 +199,9 @@ export class UpdateFieldActionHandlerService extends WorkspaceMigrationRunnerAct queryRunner, schemaName, tableName, - update: update as FlatFieldMetadataPropertyUpdate< - 'settings', - MorphOrRelationFieldMetadataType + update: update as PropertyUpdate< + FlatFieldMetadata, + 'settings' >, }); } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts index ec1174394b4..08717d90c29 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/create-index-action-handler.service.ts @@ -6,28 +6,90 @@ import { } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { addFlatEntityToFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/add-flat-entity-to-flat-entity-maps-or-throw.util'; +import { findFlatObjectMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-object-metadata-in-flat-object-metadata-maps-or-throw.util'; +import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; +import { WorkspaceSchemaManagerService } from 'src/engine/twenty-orm/workspace-schema-manager/workspace-schema-manager.service'; import { type CreateIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; +import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; @Injectable() export class CreateIndexActionHandlerService extends WorkspaceMigrationRunnerActionHandler( 'create_index', ) { - optimisticallyApplyActionOnAllFlatEntityMaps( - _args: OptimisticallyApplyActionOnAllFlatEntityMapsArgs, - ): Partial { - return {}; + constructor( + private readonly workspaceSchemaManagerService: WorkspaceSchemaManagerService, + ) { + super(); + } + + optimisticallyApplyActionOnAllFlatEntityMaps({ + action, + allFlatEntityMaps: { flatIndexMaps }, + }: OptimisticallyApplyActionOnAllFlatEntityMapsArgs): Partial { + return { + flatIndexMaps: addFlatEntityToFlatEntityMapsOrThrow({ + flatEntity: action.flatIndexMetadata, + flatEntityMaps: flatIndexMaps, + }), + }; } async executeForMetadata( - _context: WorkspaceMigrationActionRunnerArgs, + context: WorkspaceMigrationActionRunnerArgs, ): Promise { - throw new Error('Not implemented'); + const { action, queryRunner } = context; + const indexMetadataRepository = + queryRunner.manager.getRepository( + IndexMetadataEntity, + ); + + const { + flatIndexMetadata: { flatIndexFieldMetadatas, ...rest }, + } = action; + + await indexMetadataRepository.insert({ + indexFieldMetadatas: flatIndexFieldMetadatas, + ...rest, + }); } async executeForWorkspaceSchema( - _context: WorkspaceMigrationActionRunnerArgs, + context: WorkspaceMigrationActionRunnerArgs, ): Promise { - throw new Error('Not implemented'); + const { + allFlatEntityMaps: { flatObjectMetadataMaps }, + action: { flatIndexMetadata }, + queryRunner, + workspaceId, + } = context; + + const flatObjectMetadata = + findFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ + flatObjectMetadataMaps, + objectMetadataId: flatIndexMetadata.objectMetadataId, + }); + const { schemaName, tableName } = getWorkspaceSchemaContextForMigration({ + workspaceId, + flatObjectMetadata, + }); + + const quotedColumns = flatIndexMetadata.flatIndexFieldMetadatas.map( + (column) => `"${column}"`, + ); + + await this.workspaceSchemaManagerService.indexManager.createIndex({ + index: { + columns: quotedColumns, + name: flatIndexMetadata.name, + isUnique: flatIndexMetadata.isUnique, + type: flatIndexMetadata.indexType, + where: flatIndexMetadata.indexWhereClause ?? undefined, + }, + queryRunner, + schemaName, + tableName, + }); } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts index 287f2b61315..42edf67b287 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/index/services/delete-index-action-handler.service.ts @@ -6,28 +6,76 @@ import { } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/interfaces/workspace-migration-runner-action-handler-service.interface'; import { AllFlatEntityMaps } from 'src/engine/core-modules/common/types/all-flat-entity-maps.type'; +import { deleteFlatEntityFromFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/delete-flat-entity-from-flat-entity-maps-or-throw.util'; +import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/core-modules/common/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; +import { findFlatObjectMetadataInFlatObjectMetadataMapsOrThrow } from 'src/engine/metadata-modules/flat-object-metadata-maps/utils/find-flat-object-metadata-in-flat-object-metadata-maps-or-throw.util'; +import { IndexMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-metadata.entity'; import { type DeleteIndexAction } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-builder-v2/types/workspace-migration-index-action-v2'; import { type WorkspaceMigrationActionRunnerArgs } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/types/workspace-migration-action-runner-args.type'; +import { getWorkspaceSchemaContextForMigration } from 'src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/utils/get-workspace-schema-context-for-migration.util'; @Injectable() export class DeleteIndexActionHandlerService extends WorkspaceMigrationRunnerActionHandler( 'delete_index', ) { - optimisticallyApplyActionOnAllFlatEntityMaps( - _args: OptimisticallyApplyActionOnAllFlatEntityMapsArgs, - ): Partial { - return {}; + optimisticallyApplyActionOnAllFlatEntityMaps({ + action, + allFlatEntityMaps: { flatIndexMaps }, + }: OptimisticallyApplyActionOnAllFlatEntityMapsArgs): Partial { + return { + flatIndexMaps: deleteFlatEntityFromFlatEntityMapsOrThrow({ + entityToDeleteId: action.flatIndexMetadataId, + flatEntityMaps: flatIndexMaps, + }), + }; } async executeForMetadata( - _context: WorkspaceMigrationActionRunnerArgs, + context: WorkspaceMigrationActionRunnerArgs, ): Promise { - throw new Error('Not implemented'); + const { action, queryRunner } = context; + const indexMetadataRepository = + queryRunner.manager.getRepository( + IndexMetadataEntity, + ); + + const { flatIndexMetadataId } = action; + + await indexMetadataRepository.delete({ + id: flatIndexMetadataId, + }); } async executeForWorkspaceSchema( - _context: WorkspaceMigrationActionRunnerArgs, + context: WorkspaceMigrationActionRunnerArgs, ): Promise { - throw new Error('Not implemented'); + const { + action, + allFlatEntityMaps: { flatObjectMetadataMaps, flatIndexMaps }, + queryRunner, + workspaceId, + } = context; + + const flatIndexMetadataToDelete = findFlatEntityByIdInFlatEntityMapsOrThrow( + { + flatEntityId: action.flatIndexMetadataId, + flatEntityMaps: flatIndexMaps, + }, + ); + + const flatObjectMetadata = + findFlatObjectMetadataInFlatObjectMetadataMapsOrThrow({ + flatObjectMetadataMaps, + objectMetadataId: flatIndexMetadataToDelete.objectMetadataId, + }); + const { schemaName, tableName } = getWorkspaceSchemaContextForMigration({ + workspaceId, + flatObjectMetadata, + }); + + await queryRunner.dropIndex( + `${schemaName}.${tableName}`, + flatIndexMetadataToDelete.name, + ); } } diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts index c453fff7f8c..d68a8a84b00 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/object/services/create-object-action-handler.service.ts @@ -80,7 +80,7 @@ export class CreateObjectActionHandlerService extends WorkspaceMigrationRunnerAc order: { createdAt: 'DESC' }, }); - await objectMetadataRepository.save({ + await objectMetadataRepository.insert({ ...flatObjectMetadataWithoutFields, dataSourceId: lastDataSourceMetadata.id, targetTableName: 'DEPRECATED', diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts index 6c0ac3e6f02..03279fd7d7a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view-field/services/create-view-field-action-handler.service.ts @@ -45,7 +45,7 @@ export class CreateViewFieldActionHandlerService extends WorkspaceMigrationRunne const viewFieldRepository = queryRunner.manager.getRepository(ViewFieldEntity); - await viewFieldRepository.save({ + await viewFieldRepository.insert({ ...viewField, workspaceId, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts index a3278dd92fa..e635b7afd3a 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-migration-v2/workspace-migration-runner-v2/action-handlers/view/services/create-view-action-handler.service.ts @@ -45,7 +45,7 @@ export class CreateViewActionHandlerService extends WorkspaceMigrationRunnerActi const viewRepository = queryRunner.manager.getRepository(ViewEntity); - await viewRepository.save({ + await viewRepository.insert({ ...view, workspaceId, }); diff --git a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-index-metadata.interface.ts b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-index-metadata.interface.ts index b3ce438600e..1b218b91ffe 100644 --- a/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-index-metadata.interface.ts +++ b/packages/twenty-server/src/engine/workspace-manager/workspace-sync-metadata/interfaces/partial-index-metadata.interface.ts @@ -2,7 +2,12 @@ import { type IndexMetadataEntity } from 'src/engine/metadata-modules/index-meta export type PartialIndexMetadata = Omit< IndexMetadataEntity, - 'id' | 'objectMetadata' | 'indexFieldMetadatas' | 'createdAt' | 'updatedAt' + | 'id' + | 'objectMetadata' + | 'indexFieldMetadatas' + | 'createdAt' + | 'updatedAt' + | 'universalIdentifier' > & { columns: string[]; }; diff --git a/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/failing-create-view-field-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/failing-create-view-field-v2.integration-spec.ts.snap index 412e9fac5bc..e489889d726 100644 --- a/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/failing-create-view-field-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/graphql/suites/view/__snapshots__/failing-create-view-field-v2.integration-spec.ts.snap @@ -5,6 +5,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [], "view": [], "viewField": [ @@ -28,9 +29,10 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -45,6 +47,7 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [], "view": [], "viewField": [ @@ -68,9 +71,10 @@ exports[`View Field Resolver - Failing Create Operation - v2 should fail to crea }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap index cf9d6cf2cf9..4f7ea314473 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-create-one-field-metadata-enum-v2.integration-spec.ts.snap @@ -6,6 +6,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -29,9 +30,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -48,6 +50,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -71,9 +74,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -90,6 +94,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -112,9 +117,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -131,6 +137,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -168,9 +175,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -187,6 +195,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -224,9 +233,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -243,6 +253,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -280,9 +291,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -299,6 +311,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -336,9 +349,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -355,6 +369,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -377,9 +392,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -396,6 +412,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -419,9 +436,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -438,6 +456,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -465,9 +484,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -484,6 +504,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -506,9 +527,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -525,6 +547,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -548,9 +571,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -567,6 +591,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -589,9 +614,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -608,6 +634,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -645,9 +672,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -664,6 +692,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -686,9 +715,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -705,6 +735,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -727,9 +758,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -746,6 +778,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -769,9 +802,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -788,6 +822,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -811,9 +846,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -830,6 +866,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -852,9 +889,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -871,6 +909,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -894,9 +933,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -913,6 +953,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -935,9 +976,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -954,6 +996,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -981,9 +1024,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1000,6 +1044,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1022,9 +1067,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1041,6 +1087,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1064,9 +1111,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1083,6 +1131,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1105,9 +1154,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1124,6 +1174,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1151,9 +1202,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1170,6 +1222,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1192,9 +1245,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1211,6 +1265,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1234,9 +1289,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1253,6 +1309,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1275,9 +1332,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1294,6 +1352,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1321,9 +1380,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1340,6 +1400,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1362,9 +1423,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1381,6 +1443,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1403,9 +1466,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1422,6 +1486,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1449,9 +1514,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1468,6 +1534,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1490,9 +1557,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1509,6 +1577,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1531,9 +1600,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1550,6 +1620,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1573,9 +1644,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1592,6 +1664,7 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1614,9 +1687,10 @@ exports[`Failing create field metadata MULTI_SELECT tests suite v2 Create should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1633,6 +1707,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1660,9 +1735,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1679,6 +1755,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1701,9 +1778,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1720,6 +1798,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1742,9 +1821,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1761,6 +1841,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1798,9 +1879,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1817,6 +1899,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1854,9 +1937,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1873,6 +1957,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1910,9 +1995,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1929,6 +2015,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1966,9 +2053,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1985,6 +2073,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2008,9 +2097,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2027,6 +2117,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2054,9 +2145,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2073,6 +2165,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2095,9 +2188,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2114,6 +2208,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2137,9 +2232,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2156,6 +2252,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2178,9 +2275,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2197,6 +2295,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2219,9 +2318,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2238,6 +2338,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2260,9 +2361,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2279,6 +2381,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2302,9 +2405,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2321,6 +2425,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2343,9 +2448,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2362,6 +2468,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2385,9 +2492,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2404,6 +2512,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2426,9 +2535,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2445,6 +2555,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2472,9 +2583,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2491,6 +2603,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2513,9 +2626,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2532,6 +2646,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2555,9 +2670,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2574,6 +2690,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2596,9 +2713,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2615,6 +2733,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2642,9 +2761,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2661,6 +2781,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2683,9 +2804,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2702,6 +2824,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2725,9 +2848,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2744,6 +2868,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2766,9 +2891,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2785,6 +2911,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2812,9 +2939,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2831,6 +2959,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2853,9 +2982,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2872,6 +3002,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2894,9 +3025,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2913,6 +3045,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2940,9 +3073,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2959,6 +3093,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2981,9 +3116,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -3000,6 +3136,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -3022,9 +3159,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -3041,6 +3179,7 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -3064,9 +3203,10 @@ exports[`Failing create field metadata SELECT tests suite v2 Create should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-update-one-enum-field-metadata-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-update-one-enum-field-metadata-v2.integration-spec.ts.snap index 2a229f1541a..a319ee1ebc9 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-update-one-enum-field-metadata-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/enum/__snapshots__/failing-update-one-enum-field-metadata-v2.integration-spec.ts.snap @@ -6,6 +6,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -29,9 +30,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -48,6 +50,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -71,9 +74,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -90,6 +94,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -112,9 +117,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -131,6 +137,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -168,9 +175,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -187,6 +195,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -224,9 +233,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -243,6 +253,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -280,9 +291,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -299,6 +311,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -336,9 +349,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -355,6 +369,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -377,9 +392,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -396,6 +412,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -419,9 +436,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -438,6 +456,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -465,9 +484,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -484,6 +504,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -506,9 +527,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -525,6 +547,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -548,9 +571,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -567,6 +591,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -589,9 +614,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -608,6 +634,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -645,9 +672,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -664,6 +692,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -686,9 +715,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -705,6 +735,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -727,9 +758,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -746,6 +778,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -769,9 +802,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -788,6 +822,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -811,9 +846,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -830,6 +866,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -852,9 +889,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -871,6 +909,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -894,9 +933,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -913,6 +953,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -935,9 +976,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -954,6 +996,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -981,9 +1024,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1000,6 +1044,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1022,9 +1067,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1041,6 +1087,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1063,9 +1110,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1082,6 +1130,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1109,9 +1158,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1128,6 +1178,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1150,9 +1201,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1169,6 +1221,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1192,9 +1245,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1211,6 +1265,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1233,9 +1288,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1252,6 +1308,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1279,9 +1336,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1298,6 +1356,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1320,9 +1379,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1339,6 +1399,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1361,9 +1422,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1380,6 +1442,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1407,9 +1470,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1426,6 +1490,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1448,9 +1513,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1467,6 +1533,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1489,9 +1556,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1508,6 +1576,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1530,9 +1599,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1549,6 +1619,7 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1571,9 +1642,10 @@ exports[`Failing update field metadata MULTI_SELECT tests suite v2 Update should }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1590,6 +1662,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1617,9 +1690,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1636,6 +1710,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1658,9 +1733,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1677,6 +1753,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1699,9 +1776,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1718,6 +1796,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1755,9 +1834,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1774,6 +1854,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1811,9 +1892,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1830,6 +1912,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1867,9 +1950,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1886,6 +1970,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1923,9 +2008,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1942,6 +2028,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1965,9 +2052,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1984,6 +2072,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2011,9 +2100,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2030,6 +2120,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2052,9 +2143,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2071,6 +2163,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2094,9 +2187,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2113,6 +2207,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2135,9 +2230,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2154,6 +2250,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2176,9 +2273,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2195,6 +2293,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2217,9 +2316,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2236,6 +2336,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2259,9 +2360,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2278,6 +2380,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2300,9 +2403,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2319,6 +2423,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2342,9 +2447,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2361,6 +2467,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2383,9 +2490,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2402,6 +2510,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2429,9 +2538,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2448,6 +2558,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2470,9 +2581,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2489,6 +2601,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2511,9 +2624,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2530,6 +2644,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2557,9 +2672,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2576,6 +2692,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2598,9 +2715,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2617,6 +2735,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2640,9 +2759,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2659,6 +2779,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2681,9 +2802,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2700,6 +2822,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2727,9 +2850,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2746,6 +2870,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2768,9 +2893,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2787,6 +2913,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2809,9 +2936,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2828,6 +2956,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2855,9 +2984,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2874,6 +3004,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2896,9 +3027,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2915,6 +3047,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2937,9 +3070,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -2956,6 +3090,7 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -2978,9 +3113,10 @@ exports[`Failing update field metadata SELECT tests suite v2 Update should fail }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", diff --git a/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap index 8608bbb736a..d075c206e57 100644 --- a/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/field-metadata/morph-relation/__snapshots__/failing-create-one-field-metadata-morph-relation-v2.integration-spec.ts.snap @@ -5,6 +5,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -44,9 +45,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -61,6 +63,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -84,9 +87,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 Morh re }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -101,6 +105,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -119,9 +124,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -136,6 +142,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -154,9 +161,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -171,6 +179,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -200,9 +209,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -217,6 +227,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -240,9 +251,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -257,6 +269,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -280,9 +293,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -297,6 +311,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -326,9 +341,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -343,6 +359,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -369,9 +386,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -386,6 +404,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -412,9 +431,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -429,6 +449,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -454,9 +475,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -471,6 +493,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -489,9 +512,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -506,6 +530,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -524,9 +549,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -541,6 +567,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -559,9 +586,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -576,6 +604,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -597,9 +626,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -614,6 +644,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -633,9 +664,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -650,6 +682,7 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -668,9 +701,10 @@ exports[`failing createOne FieldMetadataService morph relation fields v2 it shou }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", diff --git a/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap b/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap index 7799cbe7002..f41a3eec854 100644 --- a/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap +++ b/packages/twenty-server/test/integration/metadata/suites/object-metadata/__snapshots__/failing-create-one-object-metadata-v2.integration-spec.ts.snap @@ -5,6 +5,7 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -27,9 +28,10 @@ exports[`Object metadata creation should fail v2 when labelPlural contains only }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -44,6 +46,7 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -66,9 +69,10 @@ exports[`Object metadata creation should fail v2 when labelPlural exceeds maximu }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -83,6 +87,7 @@ exports[`Object metadata creation should fail v2 when labelPlural is empty 1`] = "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -105,9 +110,10 @@ exports[`Object metadata creation should fail v2 when labelPlural is empty 1`] = }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -122,6 +128,7 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -144,9 +151,10 @@ exports[`Object metadata creation should fail v2 when labelSingular contains onl }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -161,6 +169,7 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -183,9 +192,10 @@ exports[`Object metadata creation should fail v2 when labelSingular exceeds maxi }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -200,6 +210,7 @@ exports[`Object metadata creation should fail v2 when labelSingular is empty 1`] "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -222,9 +233,10 @@ exports[`Object metadata creation should fail v2 when labelSingular is empty 1`] }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -239,6 +251,7 @@ exports[`Object metadata creation should fail v2 when labels are identical 1`] = "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -262,9 +275,10 @@ exports[`Object metadata creation should fail v2 when labels are identical 1`] = }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -279,6 +293,7 @@ exports[`Object metadata creation should fail v2 when labels with whitespaces re "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -302,9 +317,10 @@ exports[`Object metadata creation should fail v2 when labels with whitespaces re }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -319,6 +335,7 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -421,9 +438,10 @@ exports[`Object metadata creation should fail v2 when name exceeds maximum lengt }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -438,6 +456,7 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -460,9 +479,10 @@ exports[`Object metadata creation should fail v2 when namePlural has invalid cha }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -477,6 +497,7 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -499,9 +520,10 @@ exports[`Object metadata creation should fail v2 when namePlural is a reserved k }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -516,6 +538,7 @@ exports[`Object metadata creation should fail v2 when namePlural is an empty str "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -543,9 +566,10 @@ exports[`Object metadata creation should fail v2 when namePlural is an empty str }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -560,6 +584,7 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -587,9 +612,10 @@ exports[`Object metadata creation should fail v2 when namePlural is not camelCas }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -604,6 +630,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -741,9 +768,10 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -758,6 +786,7 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -895,9 +924,10 @@ exports[`Object metadata creation should fail v2 when nameSingular contains only }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -912,6 +942,7 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1014,9 +1045,10 @@ exports[`Object metadata creation should fail v2 when nameSingular has invalid c }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1031,6 +1063,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1133,9 +1166,10 @@ exports[`Object metadata creation should fail v2 when nameSingular is a reserved }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1150,6 +1184,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is an empty s "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1287,9 +1322,10 @@ exports[`Object metadata creation should fail v2 when nameSingular is an empty s }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1304,6 +1340,7 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1441,9 +1478,10 @@ exports[`Object metadata creation should fail v2 when nameSingular is not camelC }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1458,6 +1496,7 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] = "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1481,9 +1520,10 @@ exports[`Object metadata creation should fail v2 when names are identical 1`] = }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)", @@ -1498,6 +1538,7 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res "extensions": { "code": "BAD_USER_INPUT", "errors": { + "index": [], "objectMetadata": [ { "errors": [ @@ -1521,9 +1562,10 @@ exports[`Object metadata creation should fail v2 when names with whitespaces res }, "message": "Validation failed for 0 object(s) and 0 field(s)", "summary": { - "invalidObjectMetadatas": 0, - "invalidViewFields": 0, - "invalidViews": 0, + "invalidIndex": 0, + "invalidObjectMetadata": 0, + "invalidView": 0, + "invalidViewField": 0, "totalErrors": 0, }, "userFriendlyMessage": "Validation failed for 0 object(s) and 0 field(s)",