Skip to content

Commit 006fa43

Browse files
Enhance column selection logic in GraphQL query runner
- Added support for composite field metadata types in the column selection process. - Introduced a utility function to compute composite column names based on subfield properties. - Updated the logic to handle cases where composite types are not defined, ensuring robustness in column name extraction.
1 parent b0a294e commit 006fa43

File tree

1 file changed

+24
-3
lines changed

1 file changed

+24
-3
lines changed

packages/twenty-server/src/engine/api/graphql/graphql-query-runner/utils/build-columns-to-select.ts

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
1-
import { FieldMetadataType } from 'twenty-shared/types';
1+
import {
2+
FieldMetadataType,
3+
compositeTypeDefinitions,
4+
} from 'twenty-shared/types';
25
import { isDefined } from 'twenty-shared/utils';
36

47
import { type ObjectRecordOrderBy } from 'src/engine/api/graphql/workspace-query-builder/interfaces/object-record.interface';
58
import { RelationType } from 'src/engine/metadata-modules/field-metadata/interfaces/relation-type.interface';
69

10+
import { computeCompositeColumnName } from 'src/engine/metadata-modules/field-metadata/utils/compute-column-name.util';
711
import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util';
812
import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type';
913
import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util';
1014
import { type FlatFieldMetadata } from 'src/engine/metadata-modules/flat-field-metadata/types/flat-field-metadata.type';
1115
import { buildFieldMapsFromFlatObjectMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/build-field-maps-from-flat-object-metadata.util';
1216
import { isFlatFieldMetadataOfType } from 'src/engine/metadata-modules/flat-field-metadata/utils/is-flat-field-metadata-of-type.util';
1317
import { type FlatObjectMetadata } from 'src/engine/metadata-modules/flat-object-metadata/types/flat-object-metadata.type';
14-
import { pascalCase } from 'src/utils/pascal-case';
1518

1619
export const buildColumnsToSelect = ({
1720
select,
@@ -156,10 +159,28 @@ const extractColumnNamesFromOrderBy = (
156159
isCompositeFieldMetadataType(fieldMetadata.type) &&
157160
isDefined(orderByValue)
158161
) {
162+
const compositeType = compositeTypeDefinitions.get(fieldMetadata.type);
163+
164+
if (!compositeType) {
165+
columnNames.push(fieldName);
166+
continue;
167+
}
168+
159169
const subFieldNames = Object.keys(orderByValue);
160170

161171
for (const subFieldName of subFieldNames) {
162-
const columnName = `${fieldName}${pascalCase(subFieldName)}`;
172+
const compositeProperty = compositeType.properties.find(
173+
(property) => property.name === subFieldName,
174+
);
175+
176+
if (!compositeProperty) {
177+
continue;
178+
}
179+
180+
const columnName = computeCompositeColumnName(
181+
fieldName,
182+
compositeProperty,
183+
);
163184

164185
columnNames.push(columnName);
165186
}

0 commit comments

Comments
 (0)