diff --git a/src/lib/db/strategy-store.ts b/src/lib/db/strategy-store.ts index a604fbf995..65d95c6950 100644 --- a/src/lib/db/strategy-store.ts +++ b/src/lib/db/strategy-store.ts @@ -11,6 +11,7 @@ const STRATEGY_COLUMNS = [ 'parameters', 'built_in', 'deprecated', + 'display_name', ]; const TABLE = 'strategies'; @@ -20,6 +21,7 @@ export interface IStrategy { description: string; parameters: object; deprecated: boolean; + displayName: string; } export interface IEditableStrategy { @@ -41,6 +43,7 @@ interface IStrategyRow { description: string; parameters: object; deprecated: boolean; + display_name: string; } export default class StrategyStore { private db: Knex; @@ -56,6 +59,7 @@ export default class StrategyStore { const rows = await this.db .select(STRATEGY_COLUMNS) .from(TABLE) + .orderBy('sort_order', 'asc') .orderBy('name', 'asc'); return rows.map(this.rowToStrategy); @@ -66,7 +70,9 @@ export default class StrategyStore { .select(STRATEGY_COLUMNS) .from(TABLE) .where({ built_in: 0 }) // eslint-disable-line + .orderBy('sort_order', 'asc') .orderBy('name', 'asc'); + return rows.map(this.rowToEditableStrategy); } @@ -83,6 +89,7 @@ export default class StrategyStore { throw new NotFoundError('No strategy found'); } return { + displayName: row.display_name, name: row.name, editable: row.built_in !== 1, description: row.description, diff --git a/src/migrations/20210421133845-add-sort-order-to-strategies.js b/src/migrations/20210421133845-add-sort-order-to-strategies.js new file mode 100644 index 0000000000..ca0b39de94 --- /dev/null +++ b/src/migrations/20210421133845-add-sort-order-to-strategies.js @@ -0,0 +1,19 @@ +'use strict'; + +exports.up = function(db, cb) { + db.runSql( + ` + ALTER TABLE strategies ADD COLUMN sort_order integer DEFAULT 9999; + UPDATE strategies SET sort_order = 0 WHERE name = 'default'; + UPDATE strategies SET sort_order = 1 WHERE name = 'flexibleRollout'; + UPDATE strategies SET sort_order = 2 WHERE name = 'userWithId'; + UPDATE strategies SET sort_order = 3 WHERE name = 'remoteAddress'; + UPDATE strategies SET sort_order = 4 WHERE name = 'applicationHostname'; + `, + cb, + ); +}; + +exports.down = function(db, cb) { + db.runSql(`ALTER TABLE strategies REMOVE COLUMN sort_order;`, cb); +}; diff --git a/src/migrations/20210421135405-add-display-name-and-update-description-for-strategies.js b/src/migrations/20210421135405-add-display-name-and-update-description-for-strategies.js new file mode 100644 index 0000000000..eae9a51de0 --- /dev/null +++ b/src/migrations/20210421135405-add-display-name-and-update-description-for-strategies.js @@ -0,0 +1,19 @@ +'use strict'; + +exports.up = function(db, cb) { + db.runSql( + ` + ALTER TABLE strategies ADD COLUMN display_name text; + UPDATE strategies SET display_name = 'Standard', description = 'The standard strategy is strictly on / off for your entire userbase.' WHERE name = 'default'; + UPDATE strategies SET display_name = 'Gradual rollout', description = 'Roll out to a percentage of your userbase, and ensure that the experience is the same for the user on each visit.' WHERE name = 'flexibleRollout'; + UPDATE strategies SET display_name = 'UserIDs', description = 'Enable the feature for a specific set of userIds.' WHERE name = 'userWithId'; + UPDATE strategies SET display_name = 'IPs', description = 'Enable the feature for a specific set of IP addresses.' WHERE name = 'remoteAddress'; + UPDATE strategies SET display_name = 'Hosts', description = 'Enable the feature for a specific set of hostnames.' WHERE name = 'applicationHostname'; + `, + cb, + ); +}; + +exports.down = function(db, cb) { + db.runSql(`ALTER TABLE strategies DROP COLUMN display_name;`, cb); +};