unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
44 lines • 2.09 kB
JavaScript
import { SKIP_CHANGE_REQUEST } from '../../types/index.js';
export class ChangeRequestAccessReadModel {
constructor(db, accessService) {
this.db = db;
this.accessService = accessService;
}
async canBypassChangeRequest(project, environment, user) {
const [canSkipChangeRequest, changeRequestEnabled] = await Promise.all([
user
? this.accessService.hasPermission(user, SKIP_CHANGE_REQUEST, project, environment)
: Promise.resolve(false),
this.isChangeRequestsEnabled(project, environment),
]);
return canSkipChangeRequest || !changeRequestEnabled;
}
async canBypassChangeRequestForProject(project, user) {
const [canSkipChangeRequest, changeRequestEnabled] = await Promise.all([
user
? this.accessService.hasPermission(user, SKIP_CHANGE_REQUEST, project)
: Promise.resolve(false),
this.isChangeRequestsEnabledForProject(project),
]);
return canSkipChangeRequest || !changeRequestEnabled;
}
async isChangeRequestsEnabled(project, environment) {
const result = await this.db.raw(`SELECT EXISTS(SELECT 1
FROM change_request_settings
WHERE environment = ?
and project = ?) AS present`, [environment, project]);
const { present } = result.rows[0];
return present;
}
async isChangeRequestsEnabledForProject(project) {
const result = await this.db('change_request_settings')
.join('project_environments', function () {
return this.on('change_request_settings.project', 'project_environments.project_id').andOn('change_request_settings.environment', 'project_environments.environment_name');
})
.where('change_request_settings.project', project)
.select('change_request_settings.project')
.first();
return Boolean(result);
}
}
//# sourceMappingURL=sql-change-request-access-read-model.js.map