Migrate metadata cache (#16030)
## Context Deprecating legacy ObjectMetadata from cache in favor of flat entities. Introducing utils to build byName/byNameSingular/byNamePlural in isolated cases ## Next - I had to introduce a util to build from flat to legacy objectMetadataMaps, we should instead use flat maps directly when needed (datasource, schema generation, etc) - Deprecate metadata version in the cache - Use the new cache strategy for flat entities with permissions and feature flags and inject in the global datasource context
This commit is contained in:
+45
@@ -0,0 +1,45 @@
|
||||
import { isDefined } from 'twenty-shared/utils';
|
||||
|
||||
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
|
||||
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
|
||||
import { isMorphOrRelationFlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-morph-or-relation-flat-field-metadata.util';
|
||||
|
||||
export type FieldMapsForObject = {
|
||||
fieldIdByName: Record<string, string>;
|
||||
fieldIdByJoinColumnName: Record<string, string>;
|
||||
};
|
||||
|
||||
export const buildFieldMapsForObject = (
|
||||
flatFieldMetadataMaps: FlatEntityMaps<FlatFieldMetadata>,
|
||||
objectMetadataId: string,
|
||||
): FieldMapsForObject => {
|
||||
const fieldIdByName: Record<string, string> = {};
|
||||
const fieldIdByJoinColumnName: Record<string, string> = {};
|
||||
|
||||
for (const [fieldId, field] of Object.entries(flatFieldMetadataMaps.byId)) {
|
||||
if (!isDefined(field)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (field.objectMetadataId !== objectMetadataId) {
|
||||
continue;
|
||||
}
|
||||
|
||||
fieldIdByName[field.name] = fieldId;
|
||||
|
||||
if (isMorphOrRelationFlatFieldMetadata(field)) {
|
||||
const joinColumnName = (
|
||||
field.settings as { joinColumnName?: string } | undefined
|
||||
)?.joinColumnName;
|
||||
|
||||
if (joinColumnName) {
|
||||
fieldIdByJoinColumnName[joinColumnName] = fieldId;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
fieldIdByName,
|
||||
fieldIdByJoinColumnName,
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user