fbd3286792
# Introduction Honestly this implem is a mess, discussing a potential side effect handler with @weiko before the build and run that would handle each side effect per entity and operation Handling: - [ ] unique index is generated when a field is updated with the `isUnique` - [x] an index is generated when a relation is created - [x] search vector index creation on custom object creation - [x] renaming a field metadata or an object should re-create all related indexes which are composed by their namings - [x] delete object should remove any related indexes - [x] delete field should update related indexes ( if index ends up empty it should be removed ) - [ ] on object renaming that contains morph fields -> triggers update field -> trigger index recompute - [x] on update name renaming should recompute all related indexes ## TODO - [x] Integration testing - [ ] Refactor the index maps cache to be storing a `idsByObjectMetadataId` - [x] Refactor deterministic name to use order sorting - [x] Remove flat index from flat object ## What's next Will handle morph indexes in a new dedicated PR for the moment will stick to this Same for the cache improvement and uniqueness
78 lines
2.0 KiB
TypeScript
78 lines
2.0 KiB
TypeScript
import { findManyObjectMetadata } from 'test/integration/metadata/suites/object-metadata/utils/find-many-object-metadata.util';
|
|
|
|
import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
|
|
import { type RelationDTO } from 'src/engine/metadata-modules/field-metadata/dtos/relation.dto';
|
|
import { type IndexFieldMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-field-metadata.dto';
|
|
import { type IndexMetadataDTO } from 'src/engine/metadata-modules/index-metadata/dtos/index-metadata.dto';
|
|
import { type ObjectMetadataDTO } from 'src/engine/metadata-modules/object-metadata/dtos/object-metadata.dto';
|
|
|
|
export const findManyObjectMetadataWithIndexes = async ({
|
|
expectToFail,
|
|
}: {
|
|
expectToFail: boolean;
|
|
}) => {
|
|
const { objects } = await findManyObjectMetadata({
|
|
expectToFail,
|
|
input: {
|
|
filter: {},
|
|
paging: {
|
|
first: 100,
|
|
},
|
|
},
|
|
gqlFields: `
|
|
id
|
|
nameSingular
|
|
fieldsList {
|
|
id
|
|
type
|
|
name
|
|
relation {
|
|
type
|
|
sourceObjectMetadata {
|
|
id
|
|
nameSingular
|
|
namePlural
|
|
}
|
|
targetObjectMetadata {
|
|
id
|
|
nameSingular
|
|
namePlural
|
|
}
|
|
sourceFieldMetadata {
|
|
id
|
|
name
|
|
}
|
|
targetFieldMetadata {
|
|
id
|
|
name
|
|
}
|
|
}
|
|
}
|
|
indexMetadataList {
|
|
name
|
|
isUnique
|
|
isCustom
|
|
indexType
|
|
indexFieldMetadataList {
|
|
id
|
|
fieldMetadataId
|
|
createdAt
|
|
updatedAt
|
|
order
|
|
}
|
|
}
|
|
`,
|
|
});
|
|
|
|
return objects as Array<
|
|
ObjectMetadataDTO & {
|
|
fieldsList: (FieldMetadataDTO & { relation: RelationDTO | null })[];
|
|
indexMetadataList: Array<
|
|
IndexMetadataDTO & {
|
|
indexFieldMetadataList: IndexFieldMetadataDTO[];
|
|
}
|
|
>;
|
|
}
|
|
>;
|
|
};
|