diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-order/utils/prepare-for-order-by-relation-field-parsing.util.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-order/utils/prepare-for-order-by-relation-field-parsing.util.ts index 70e9538e0d..b926242565 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-order/utils/prepare-for-order-by-relation-field-parsing.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/graphql-query-parsers/graphql-query-order/utils/prepare-for-order-by-relation-field-parsing.util.ts @@ -1,4 +1,3 @@ -import { UserInputError } from 'apollo-server-core'; import { isObject } from 'class-validator'; import { type ObjectRecordOrderByForRelationField } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; @@ -8,6 +7,7 @@ import { type GroupByRelationField, } from 'src/engine/api/graphql/graphql-query-runner/group-by/resolvers/types/group-by-field.types'; import { isGroupByRelationField } from 'src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/is-group-by-relation-field.util'; +import { UserInputError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; 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 { buildFieldMapsFromFlatObjectMetadata } from 'src/engine/metadata-modules/flat-field-metadata/utils/build-field-maps-from-flat-object-metadata.util'; diff --git a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/parse-group-by-relation-field.util.ts b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/parse-group-by-relation-field.util.ts index 832f1d72b7..a2e4d43747 100644 --- a/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/parse-group-by-relation-field.util.ts +++ b/packages/twenty-server/src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/parse-group-by-relation-field.util.ts @@ -1,4 +1,3 @@ -import { UserInputError } from 'apollo-server-core'; import { FieldMetadataType } from 'twenty-shared/types'; import { isDefined } from 'twenty-shared/utils'; @@ -11,6 +10,7 @@ import { type DateFieldGroupByDefinition } from 'src/engine/api/graphql/graphql- import { type GroupByField } from 'src/engine/api/graphql/graphql-query-runner/group-by/resolvers/types/group-by-field.types'; import { isGroupByDateFieldDefinition } from 'src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/is-group-by-date-field-definition.util'; import { validateSingleKeyForGroupByOrThrow } from 'src/engine/api/graphql/graphql-query-runner/group-by/resolvers/utils/validate-single-key-for-group-by-or-throw.util'; +import { UserInputError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util'; import { isCompositeFieldMetadataType } from 'src/engine/metadata-modules/field-metadata/utils/is-composite-field-metadata-type.util'; import { type FlatEntityMaps } from 'src/engine/metadata-modules/flat-entity/types/flat-entity-maps.type'; import { findFlatEntityByIdInFlatEntityMapsOrThrow } from 'src/engine/metadata-modules/flat-entity/utils/find-flat-entity-by-id-in-flat-entity-maps-or-throw.util'; diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-base.generator.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-base.generator.ts index 51267b540f..ab9a4b4932 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-base.generator.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-base.generator.ts @@ -30,12 +30,12 @@ export class ObjectMetadataOrderByBaseGenerator { public generateFields({ fields, logger, - orderByDateGranularity, + isForGroupBy, context, }: { fields: FlatFieldMetadata[]; logger: Logger; - orderByDateGranularity?: boolean; + isForGroupBy?: boolean; context?: SchemaGenerationContext; }): GraphQLInputFieldConfigMap { const allGeneratedFields: GraphQLInputFieldConfigMap = {}; @@ -59,6 +59,7 @@ export class ObjectMetadataOrderByBaseGenerator { { fieldMetadata, typeOptions, + isForGroupBy, context, }, ); @@ -72,7 +73,7 @@ export class ObjectMetadataOrderByBaseGenerator { generatedFields = this.generateAtomicFieldOrderByInputType({ fieldMetadata, typeOptions, - orderByDateGranularity, + isForGroupBy, logger, }); } @@ -117,15 +118,15 @@ export class ObjectMetadataOrderByBaseGenerator { fieldMetadata, typeOptions, logger, - orderByDateGranularity, + isForGroupBy, }: { fieldMetadata: FlatFieldMetadata; typeOptions: TypeOptions; logger: Logger; - orderByDateGranularity?: boolean; + isForGroupBy?: boolean; }) { if ( - orderByDateGranularity === true && + isForGroupBy === true && (fieldMetadata.type === FieldMetadataType.DATE || fieldMetadata.type === FieldMetadataType.DATE_TIME) ) { diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-with-group-by-gql-input-type.generator.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-with-group-by-gql-input-type.generator.ts index 3169796f93..54515a1c5e 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-with-group-by-gql-input-type.generator.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/order-by-input/object-metadata-order-by-with-group-by-gql-input-type.generator.ts @@ -142,7 +142,7 @@ export class ObjectMetadataOrderByWithGroupByGqlInputTypeGenerator { return this.objectMetadataOrderByBaseGenerator.generateFields({ fields, logger: this.logger, - orderByDateGranularity: true, + isForGroupBy: true, context, }); } diff --git a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/relation-field-metadata-gql-type.generator.ts b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/relation-field-metadata-gql-type.generator.ts index 381d218079..86ce60e3d2 100644 --- a/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/relation-field-metadata-gql-type.generator.ts +++ b/packages/twenty-server/src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/input-types/relation-field-metadata-gql-type.generator.ts @@ -118,12 +118,14 @@ export class RelationFieldMetadataGqlInputTypeGenerator { public generateSimpleRelationFieldOrderByInputType({ fieldMetadata, typeOptions, + isForGroupBy, context, }: { fieldMetadata: FlatFieldMetadata< FieldMetadataType.RELATION | FieldMetadataType.MORPH_RELATION >; typeOptions: TypeOptions; + isForGroupBy?: boolean; context?: SchemaGenerationContext; }) { if (fieldMetadata.settings?.relationType === RelationType.ONE_TO_MANY) @@ -168,7 +170,9 @@ export class RelationFieldMetadataGqlInputTypeGenerator { if (isDefined(targetObjectMetadata)) { const targetOrderByInputTypeKey = computeObjectMetadataInputTypeKey( targetObjectMetadata.nameSingular, - GqlInputTypeDefinitionKind.OrderBy, + isForGroupBy + ? GqlInputTypeDefinitionKind.OrderByWithGroupBy + : GqlInputTypeDefinitionKind.OrderBy, ); const targetOrderByInputType = this.gqlTypesStorage.getGqlTypeByKey(