hotfix for lab (#9981)
Issue: When attempting to toggle a public feature flag that didn't exist in the workspace's feature flags array, the LabService threw a FeatureFlagException with code FEATURE_FLAG_NOT_FOUND. This prevented users from enabling public feature flags for the first time in their workspace. Fix: Modified the LabService to handle non-existent public feature flags by creating them instead of throwing an error. When the flag doesn't exist, the service now saves a new feature flag record with the provided key and value, associates it with the workspace, and returns the newly created flag.
This commit is contained in:
@ -2,6 +2,7 @@ import { UseFilters, UseGuards } from '@nestjs/common';
|
||||
import { Args, Mutation, Resolver } from '@nestjs/graphql';
|
||||
|
||||
import { AuthGraphqlApiExceptionFilter } from 'src/engine/core-modules/auth/filters/auth-graphql-api-exception.filter';
|
||||
import { FeatureFlag } from 'src/engine/core-modules/feature-flag/feature-flag.entity';
|
||||
import { UpdateLabPublicFeatureFlagInput } from 'src/engine/core-modules/lab/dtos/update-lab-public-feature-flag.input';
|
||||
import { LabService } from 'src/engine/core-modules/lab/services/lab.service';
|
||||
import { Workspace } from 'src/engine/core-modules/workspace/workspace.entity';
|
||||
@ -14,13 +15,11 @@ export class LabResolver {
|
||||
constructor(private labService: LabService) {}
|
||||
|
||||
@UseGuards(WorkspaceAuthGuard)
|
||||
@Mutation(() => Boolean)
|
||||
@Mutation(() => FeatureFlag)
|
||||
async updateLabPublicFeatureFlag(
|
||||
@Args('input') input: UpdateLabPublicFeatureFlagInput,
|
||||
@AuthWorkspace() workspace: Workspace,
|
||||
): Promise<boolean> {
|
||||
await this.labService.updateLabPublicFeatureFlag(workspace.id, input);
|
||||
|
||||
return true;
|
||||
): Promise<FeatureFlag> {
|
||||
return this.labService.updateLabPublicFeatureFlag(workspace.id, input);
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,7 +31,7 @@ export class LabService {
|
||||
async updateLabPublicFeatureFlag(
|
||||
workspaceId: string,
|
||||
payload: UpdateLabPublicFeatureFlagInput,
|
||||
): Promise<void> {
|
||||
): Promise<FeatureFlag> {
|
||||
featureFlagValidator.assertIsFeatureFlagKey(
|
||||
payload.publicFeatureFlag,
|
||||
new FeatureFlagException(
|
||||
@ -62,15 +62,24 @@ export class LabService {
|
||||
(flag) => flag.key === FeatureFlagKey[payload.publicFeatureFlag],
|
||||
);
|
||||
|
||||
if (!existingFlag) {
|
||||
throw new FeatureFlagException(
|
||||
'Public feature flag not found',
|
||||
FeatureFlagExceptionCode.FEATURE_FLAG_NOT_FOUND,
|
||||
);
|
||||
if (existingFlag) {
|
||||
await this.featureFlagRepository.update(existingFlag.id, {
|
||||
value: payload.value,
|
||||
});
|
||||
|
||||
return { ...existingFlag, value: payload.value };
|
||||
}
|
||||
|
||||
await this.featureFlagRepository.update(existingFlag.id, {
|
||||
const newFlag = await this.featureFlagRepository.save({
|
||||
key: FeatureFlagKey[payload.publicFeatureFlag],
|
||||
value: payload.value,
|
||||
workspaceId: workspace.id,
|
||||
});
|
||||
|
||||
workspace.featureFlags = [...(workspace.featureFlags || []), newFlag];
|
||||
|
||||
await this.workspaceRepository.save(workspace);
|
||||
|
||||
return newFlag;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user