Group By - Add feature flag (#14558)

Tested : 
- workspace needs to flush cache after activating feature flag 
- workspace does not need to flush cache if ff false and coming from
previous version (before gql schema gen updates)
This commit is contained in:
Etienne
2025-09-17 13:42:11 +02:00
committed by GitHub
parent ddb4cf0c8c
commit 24204b2928
5 changed files with 40 additions and 8 deletions
@@ -40,12 +40,18 @@ export class GqlTypeGenerator {
private readonly mutationTypeGenerator: MutationTypeGenerator,
) {}
buildAndStore(objectMetadataCollection: ObjectMetadataEntity[]) {
async buildAndStore(
objectMetadataCollection: ObjectMetadataEntity[],
workspaceId: string,
) {
const compositeTypeCollection = [...compositeTypeDefinitions.values()];
this.buildAndStoreCompositeFieldMetadataGqlTypes(compositeTypeCollection);
this.buildAndStoreObjectMetadataGqlTypes(objectMetadataCollection);
this.queryTypeGenerator.buildAndStore(objectMetadataCollection);
await this.queryTypeGenerator.buildAndStore(
objectMetadataCollection,
workspaceId,
);
this.mutationTypeGenerator.buildAndStore(objectMetadataCollection);
}
@@ -6,6 +6,8 @@ import { workspaceResolverBuilderMethodNames } from 'src/engine/api/graphql/work
import { GqlOperation } from 'src/engine/api/graphql/workspace-schema-builder/enums/gql-operation.enum';
import { RootTypeGenerator } from 'src/engine/api/graphql/workspace-schema-builder/graphql-type-generators/root-types/root-type.generator';
import { GqlTypesStorage } from 'src/engine/api/graphql/workspace-schema-builder/storages/gql-types.storage';
import { FeatureFlagKey } from 'src/engine/core-modules/feature-flag/enums/feature-flag-key.enum';
import { FeatureFlagService } from 'src/engine/core-modules/feature-flag/services/feature-flag.service';
import { type ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
@Injectable()
@@ -13,12 +15,23 @@ export class QueryTypeGenerator {
constructor(
private readonly rootTypeGenerator: RootTypeGenerator,
private readonly gqlTypesStorage: GqlTypesStorage,
private readonly featureFlagService: FeatureFlagService,
) {}
buildAndStore(objectMetadataCollection: ObjectMetadataEntity[]) {
async buildAndStore(
objectMetadataCollection: ObjectMetadataEntity[],
workspaceId: string,
) {
const isGroupByEnabled = await this.featureFlagService.isFeatureEnabled(
FeatureFlagKey.IS_GROUP_BY_ENABLED,
workspaceId,
);
return this.rootTypeGenerator.buildAndStore(
objectMetadataCollection,
[...workspaceResolverBuilderMethodNames.queries],
[...workspaceResolverBuilderMethodNames.queries].filter(
(methodName) => methodName !== 'groupBy' || isGroupByEnabled,
),
GqlOperation.Query,
);
}
@@ -17,10 +17,14 @@ export class WorkspaceGraphQLSchemaGenerator {
private readonly orphanedTypesGenerator: OrphanedTypesGenerator,
) {}
generateSchema(
async generateSchema(
objectMetadataCollection: ObjectMetadataEntity[],
): GraphQLSchema {
this.gqlTypeGenerator.buildAndStore(objectMetadataCollection);
workspaceId: string,
): Promise<GraphQLSchema> {
await this.gqlTypeGenerator.buildAndStore(
objectMetadataCollection,
workspaceId,
);
// Assemble schema
const schema = new GraphQLSchema({