mirror of
https://github.com/Unleash/unleash.git
synced 2025-08-18 13:48:58 +02:00
feat: add hasStrategies and hasEnabledStrategies on feature environments
This commit is contained in:
parent
7b7a2a706c
commit
16575c4f4b
@ -374,6 +374,10 @@ export const ProjectFeatureToggles = ({
|
|||||||
enabled: thisEnv?.enabled || false,
|
enabled: thisEnv?.enabled || false,
|
||||||
variantCount: thisEnv?.variantCount || 0,
|
variantCount: thisEnv?.variantCount || 0,
|
||||||
lastSeenAt: thisEnv?.lastSeenAt,
|
lastSeenAt: thisEnv?.lastSeenAt,
|
||||||
|
type: thisEnv?.type,
|
||||||
|
hasStrategies: thisEnv?.hasStrategies,
|
||||||
|
hasEnabledStrategies:
|
||||||
|
thisEnv?.hasEnabledStrategies,
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
}),
|
}),
|
||||||
|
@ -17,6 +17,9 @@ export interface IEnvironments {
|
|||||||
enabled: boolean;
|
enabled: boolean;
|
||||||
variantCount: number;
|
variantCount: number;
|
||||||
lastSeenAt?: string | null;
|
lastSeenAt?: string | null;
|
||||||
|
type?: string;
|
||||||
|
hasStrategies?: boolean;
|
||||||
|
hasEnabledStrategies?: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFeatureToggle {
|
export interface IFeatureToggle {
|
||||||
|
@ -479,6 +479,8 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
|||||||
sortOrder: r.environment_sort_order,
|
sortOrder: r.environment_sort_order,
|
||||||
variantCount: r.variants?.length || 0,
|
variantCount: r.variants?.length || 0,
|
||||||
lastSeenAt: r.env_last_seen_at,
|
lastSeenAt: r.env_last_seen_at,
|
||||||
|
hasStrategies: r.has_strategies,
|
||||||
|
hasEnabledStrategies: r.has_enabled_strategies,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,7 +548,18 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
|||||||
'feature_environments.environment',
|
'feature_environments.environment',
|
||||||
'environments.name',
|
'environments.name',
|
||||||
)
|
)
|
||||||
.leftJoin('feature_tag as ft', 'ft.feature_name', 'features.name');
|
.leftJoin('feature_tag as ft', 'ft.feature_name', 'features.name')
|
||||||
|
.leftJoin('feature_strategies', function () {
|
||||||
|
this.on(
|
||||||
|
'feature_strategies.feature_name',
|
||||||
|
'=',
|
||||||
|
'features.name',
|
||||||
|
).andOn(
|
||||||
|
'feature_strategies.environment',
|
||||||
|
'=',
|
||||||
|
'feature_environments.environment',
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
|
if (this.flagResolver.isEnabled('useLastSeenRefactor')) {
|
||||||
query.leftJoin(
|
query.leftJoin(
|
||||||
@ -599,12 +612,21 @@ class FeatureStrategiesStore implements IFeatureStrategiesStore {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
selectColumns = [
|
||||||
|
...selectColumns,
|
||||||
|
this.db.raw(
|
||||||
|
'EXISTS (SELECT 1 FROM feature_strategies WHERE feature_strategies.feature_name = features.name AND feature_strategies.environment = feature_environments.environment) as has_strategies',
|
||||||
|
),
|
||||||
|
this.db.raw(
|
||||||
|
'EXISTS (SELECT 1 FROM feature_strategies WHERE feature_strategies.feature_name = features.name AND feature_strategies.environment = feature_environments.environment AND (feature_strategies.disabled IS NULL OR feature_strategies.disabled = false)) as has_enabled_strategies',
|
||||||
|
),
|
||||||
|
];
|
||||||
|
|
||||||
query = query.select(selectColumns);
|
query = query.select(selectColumns);
|
||||||
const rows = await query;
|
const rows = await query;
|
||||||
|
|
||||||
if (rows.length > 0) {
|
if (rows.length > 0) {
|
||||||
const overview = this.getFeatureOverviewData(getUniqueRows(rows));
|
const overview = this.getFeatureOverviewData(getUniqueRows(rows));
|
||||||
|
|
||||||
return sortEnvironments(overview);
|
return sortEnvironments(overview);
|
||||||
}
|
}
|
||||||
return [];
|
return [];
|
||||||
|
@ -71,6 +71,15 @@ export const featureEnvironmentSchema = {
|
|||||||
description:
|
description:
|
||||||
'The date when metrics where last collected for the feature environment',
|
'The date when metrics where last collected for the feature environment',
|
||||||
},
|
},
|
||||||
|
hasStrategies: {
|
||||||
|
type: 'boolean',
|
||||||
|
description: 'Whether the feature has any strategies defined.',
|
||||||
|
},
|
||||||
|
hasEnabledStrategies: {
|
||||||
|
type: 'boolean',
|
||||||
|
description:
|
||||||
|
'Whether the feature has any enabled strategies defined.',
|
||||||
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
schemas: {
|
schemas: {
|
||||||
|
@ -194,6 +194,8 @@ export interface IEnvironmentBase {
|
|||||||
|
|
||||||
export interface IEnvironmentOverview extends IEnvironmentBase {
|
export interface IEnvironmentOverview extends IEnvironmentBase {
|
||||||
variantCount: number;
|
variantCount: number;
|
||||||
|
hasStrategies: boolean;
|
||||||
|
hasEnabledStrategies: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface IFeatureOverview {
|
export interface IFeatureOverview {
|
||||||
|
Loading…
Reference in New Issue
Block a user