unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
68 lines • 2.66 kB
JavaScript
export class FeatureStrategiesReadModel {
constructor(db) {
this.db = db;
}
activeStrategies() {
return this.db('feature_strategies')
.leftJoin('features', 'features.name', 'feature_strategies.feature_name')
.where('features.archived_at', null);
}
async getMaxFeatureEnvironmentStrategies() {
const rows = await this.activeStrategies()
.select('feature_name', 'environment')
.count('id as strategy_count')
.groupBy('feature_name', 'environment')
.orderBy('strategy_count', 'desc')
.limit(1);
return rows.length > 0
? {
feature: String(rows[0].feature_name),
environment: String(rows[0].environment),
count: Number(rows[0].strategy_count),
}
: null;
}
async getMaxFeatureStrategies() {
const rows = await this.activeStrategies()
.select('feature_name')
.count('id as strategy_count')
.groupBy('feature_name')
.orderBy('strategy_count', 'desc')
.limit(1);
return rows.length > 0
? {
feature: String(rows[0].feature_name),
count: Number(rows[0].strategy_count),
}
: null;
}
async getMaxConstraintValues() {
const rows = await this.activeStrategies()
.select('feature_name', 'environment', this.db.raw("MAX(coalesce(jsonb_array_length(constraint_value->'values'), 0)) as max_values_count"))
.crossJoin(this.db.raw(`jsonb_array_elements(constraints) AS constraint_value`))
.groupBy('feature_name', 'environment')
.orderBy('max_values_count', 'desc')
.limit(1);
return rows.length > 0
? {
feature: String(rows[0].feature_name),
environment: String(rows[0].environment),
count: Number(rows[0].max_values_count),
}
: null;
}
async getMaxConstraintsPerStrategy() {
const rows = await this.activeStrategies()
.select('feature_name', 'environment', this.db.raw('jsonb_array_length(constraints) as constraint_count'))
.orderBy('constraint_count', 'desc')
.limit(1);
return rows.length > 0
? {
feature: String(rows[0].feature_name),
environment: String(rows[0].environment),
count: Number(rows[0].constraint_count),
}
: null;
}
}
//# sourceMappingURL=feature-strategies-read-model.js.map