1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-07-26 13:48:33 +02:00

refactor: extract flags overview sql builders (#9751)

This commit is contained in:
Mateusz Kwasniewski 2025-04-14 10:56:28 +02:00 committed by GitHub
parent 417d3b80a4
commit ff3c17ffa7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -343,89 +343,10 @@ class FeatureSearchStore implements IFeatureSearchStore {
.orderBy('final_rank');
if (this.flagResolver.isEnabled('flagsOverviewSearch')) {
finalQuery
.leftJoin(
this.db('change_request_events AS cre')
.join(
'change_requests AS cr',
'cre.change_request_id',
'cr.id',
)
.select('cre.feature')
.select(
this.db.raw(
'array_agg(distinct cre.change_request_id) AS change_request_ids',
),
)
.select('cr.environment')
.groupBy('cre.feature', 'cr.environment')
.whereNotIn('cr.state', [
'Applied',
'Cancelled',
'Rejected',
])
.as('feature_cr'),
function () {
this.on(
'feature_cr.feature',
'=',
'ranked_features.feature_name',
).andOn(
'feature_cr.environment',
'=',
'ranked_features.environment',
);
},
)
.select('feature_cr.change_request_ids');
finalQuery
.leftJoin(
this.db
.with('total_milestones', (qb) => {
qb.select('release_plan_definition_id')
.count('* as total_milestones')
.from('milestones')
.groupBy('release_plan_definition_id');
})
.select([
'rpd.feature_name',
'rpd.environment',
'active_milestone.sort_order AS milestone_order',
'total_milestones.total_milestones',
'active_milestone.name AS milestone_name',
])
.from('release_plan_definitions AS rpd')
.join(
'total_milestones',
'total_milestones.release_plan_definition_id',
'rpd.id',
)
.join(
'milestones AS active_milestone',
'active_milestone.id',
'rpd.active_milestone_id',
)
.where('rpd.discriminator', 'plan')
.as('feature_release_plan'),
function () {
this.on(
'feature_release_plan.feature_name',
'=',
'ranked_features.feature_name',
).andOn(
'feature_release_plan.environment',
'=',
'ranked_features.environment',
);
},
)
.select([
'feature_release_plan.milestone_name',
'feature_release_plan.milestone_order',
'feature_release_plan.total_milestones',
]);
this.buildChangeRequestSql(finalQuery);
this.buildReleasePlanSql(finalQuery);
}
this.queryExtraData(finalQuery);
const rows = await finalQuery;
stopTimer();
@ -514,6 +435,93 @@ class FeatureSearchStore implements IFeatureSearchStore {
);
}
private buildReleasePlanSql(queryBuilder: Knex.QueryBuilder) {
queryBuilder
.leftJoin(
this.db
.with('total_milestones', (qb) => {
qb.select('release_plan_definition_id')
.count('* as total_milestones')
.from('milestones')
.groupBy('release_plan_definition_id');
})
.select([
'rpd.feature_name',
'rpd.environment',
'active_milestone.sort_order AS milestone_order',
'total_milestones.total_milestones',
'active_milestone.name AS milestone_name',
])
.from('release_plan_definitions AS rpd')
.join(
'total_milestones',
'total_milestones.release_plan_definition_id',
'rpd.id',
)
.join(
'milestones AS active_milestone',
'active_milestone.id',
'rpd.active_milestone_id',
)
.where('rpd.discriminator', 'plan')
.as('feature_release_plan'),
function () {
this.on(
'feature_release_plan.feature_name',
'=',
'ranked_features.feature_name',
).andOn(
'feature_release_plan.environment',
'=',
'ranked_features.environment',
);
},
)
.select([
'feature_release_plan.milestone_name',
'feature_release_plan.milestone_order',
'feature_release_plan.total_milestones',
]);
}
private buildChangeRequestSql(queryBuilder: Knex.QueryBuilder) {
queryBuilder
.leftJoin(
this.db('change_request_events AS cre')
.join(
'change_requests AS cr',
'cre.change_request_id',
'cr.id',
)
.select('cre.feature')
.select(
this.db.raw(
'array_agg(distinct cre.change_request_id) AS change_request_ids',
),
)
.select('cr.environment')
.groupBy('cre.feature', 'cr.environment')
.whereNotIn('cr.state', [
'Applied',
'Cancelled',
'Rejected',
])
.as('feature_cr'),
function () {
this.on(
'feature_cr.feature',
'=',
'ranked_features.feature_name',
).andOn(
'feature_cr.environment',
'=',
'ranked_features.environment',
);
},
)
.select('feature_cr.change_request_ids');
}
private buildRankingSql(
favoritesFirst: undefined | boolean,
sortBy: string,