fix: use pickMorphGroupSurvivor in relation loader to match field metadata deduplication

The relation loader was always picking the morph field with the smallest
UUID as the representative target, while filterMorphRelationDuplicateFields
uses pickMorphGroupSurvivor which prefers active non-system fields. When
a custom object's auto-created morph field (isSystem: true) had the
smallest UUID, the two loaders would disagree, causing "Target field
metadata full object not found" errors on the frontend.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Félix Malfait
2026-02-17 13:25:38 +01:00
co-authored by Cursor
parent 9477bb3677
commit c3a6d86126
@@ -10,6 +10,7 @@ import { type IndexMetadataInterface } from 'src/engine/metadata-modules/index-m
import { I18nService } from 'src/engine/core-modules/i18n/i18n.service';
import { type IDataloaders } from 'src/engine/dataloaders/dataloader.interface';
import { filterMorphRelationDuplicateFields } from 'src/engine/dataloaders/utils/filter-morph-relation-duplicate-fields.util';
import { pickMorphGroupSurvivor } from 'src/engine/dataloaders/utils/pick-morph-group-survivor.util';
import { FIELD_METADATA_STANDARD_OVERRIDES_PROPERTIES } from 'src/engine/metadata-modules/field-metadata/constants/field-metadata-standard-overrides-properties.constant';
import { type FieldMetadataDTO } from 'src/engine/metadata-modules/field-metadata/dtos/field-metadata.dto';
import { RelationDTO } from 'src/engine/metadata-modules/field-metadata/dtos/relation.dto';
@@ -188,14 +189,18 @@ export class DataloaderService {
flatFieldMetadataMaps,
flatObjectMetadata: targetFlatObjectMetadata,
}),
].sort((a, b) => (a.id > b.id ? 1 : -1));
];
const survivorMorphField = pickMorphGroupSurvivor(
allMorphFlatFieldMetadatas,
);
relationDtos.push(
fromMorphOrRelationFlatFieldMetadataToRelationDto({
sourceFlatFieldMetadata,
sourceFlatObjectMetadata,
targetFlatFieldMetadata: {
...allMorphFlatFieldMetadatas[0],
...survivorMorphField,
name: morphNameFromMorphFieldMetadataName,
},
targetFlatObjectMetadata,