Fix flatFieldMetadata transpiler to fit real cache typing (#13529)

# Introduction
The cache is not accurately typed regarding the `fieldMetadataMaps` they
do not contain relations
In this way we:
- Created dedicated transpilation tools for cache manipulation
- Avoided recursivity in transpilation tools
- Fix and finalized the createMany fields metadata service v2
- Refactor the validator to handle validation :)

## What's next:
- Implem integration tests to make things run 🙃 
- migrate existing settings valdiation
- Finish the create object metadata service
- Handle update input transpilation and validation
This commit is contained in:
Paul Rastoin
2025-08-01 18:39:11 +02:00
committed by GitHub
parent dd47bfe6d5
commit b98d8c4d39
22 changed files with 384 additions and 124 deletions
@@ -0,0 +1,42 @@
import { isDefined } from 'twenty-shared/utils';
import { FieldMetadataEntity } from 'src/engine/metadata-modules/field-metadata/field-metadata.entity';
import { IndexFieldMetadataEntity } from 'src/engine/metadata-modules/index-metadata/index-field-metadata.entity';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { CachedFieldMetadataEntity } from 'src/engine/metadata-modules/types/cached-field-metadata-entity';
import { ObjectMetadataMaps } from 'src/engine/metadata-modules/types/object-metadata-maps';
export const getFieldMetadataEntityFromCachedObjectMetadataMaps = ({
fieldMetadataId,
objectMetadataId,
objectMetadataMaps,
}: {
objectMetadataMaps: ObjectMetadataMaps;
objectMetadataId: string;
fieldMetadataId: string;
}): FieldMetadataEntity | undefined => {
const objectMetadataFromCache = objectMetadataMaps.byId[objectMetadataId];
if (!isDefined(objectMetadataFromCache)) {
return undefined;
}
const fieldMetadataFromCache: CachedFieldMetadataEntity =
objectMetadataFromCache.fieldsById[fieldMetadataId];
if (!isDefined(fieldMetadataFromCache)) {
return undefined;
}
// We need to determine if graphql will be able to handle relations crafting byitself
return {
...fieldMetadataFromCache,
object: {} as ObjectMetadataEntity,
relationTargetFieldMetadata: null,
relationTargetObjectMetadata: null,
indexFieldMetadatas: {} as IndexFieldMetadataEntity,
fieldPermissions: [],
createdAt: new Date(fieldMetadataFromCache.createdAt),
updatedAt: new Date(fieldMetadataFromCache.updatedAt),
};
};