1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-09-05 17:53:12 +02:00

add get and update functionality to project environments change request config

This commit is contained in:
andreas-unleash 2022-11-10 09:38:59 +02:00
parent b9f55a3fbc
commit 1c71ff8965
5 changed files with 80 additions and 5 deletions

View File

@ -15,11 +15,13 @@ export interface IProjectEnvironment {
export interface IEnvironmentPayload {
name: string;
type: string;
changeRequestsEnabled?: boolean;
}
export interface IEnvironmentEditPayload {
sortOrder: number;
type: string;
changeRequestsEnabled?: boolean;
}
export interface IEnvironmentClonePayload {

View File

@ -6,8 +6,10 @@ import { IEnvironment, IProject, IProjectWithCount } from '../types/model';
import {
IProjectHealthUpdate,
IProjectInsert,
IProjectEnvironmentConfig,
IProjectQuery,
IProjectStore,
IUpdateProjectEnvironmentConfig,
} from '../types/stores/project-store';
import { DEFAULT_ENV } from '../util/constants';
import metricsHelper from '../util/metrics-helper';
@ -223,7 +225,11 @@ class ProjectStore implements IProjectStore {
environments: string[],
): Promise<IEnvironmentProjectLink[]> {
let rows = await this.db('project_environments')
.select(['project_id', 'environment_name'])
.select([
'project_id',
'environment_name',
'change_request_enabled',
])
.whereIn('environment_name', environments);
return rows.map(this.mapLinkRow);
}
@ -289,6 +295,43 @@ class ProjectStore implements IProjectStore {
.pluck('project_environments.environment_name');
}
async getChangeRequestConfigForProject(
id: string,
): Promise<IProjectEnvironmentConfig[]> {
return this.db('project_environments')
.select(
'project_environments.environment_name as environment',
'environments.type as type',
'project_environments.change_request_enabled as changeRequestEnabled',
)
.where({
project_id: id,
})
.innerJoin(
'environments',
'project_environments.environment_name',
'environments.name',
)
.orderBy('environments.sort_order', 'asc')
.orderBy('project_environments.environment_name', 'asc');
}
async updateProjectEnvironmentConfig(
id: string,
data: IUpdateProjectEnvironmentConfig,
): Promise<void> {
try {
await this.db('project_environments')
.where({ project_id: id, environment_name: data.environment })
.update({ change_request_enabled: data.changeRequestsEnabled });
} catch (err) {
this.logger.error(
'Could not update project environment, error: ',
err,
);
}
}
async getMembersCount(): Promise<IProjectMembersCount[]> {
const members = await this.db
.select('project')

View File

@ -30,7 +30,12 @@ import { IEnvironmentStore } from '../types/stores/environment-store';
import { IFeatureTypeStore } from '../types/stores/feature-type-store';
import { IFeatureToggleStore } from '../types/stores/feature-toggle-store';
import { IFeatureEnvironmentStore } from '../types/stores/feature-environment-store';
import { IProjectQuery, IProjectStore } from '../types/stores/project-store';
import {
IProjectEnvironmentConfig,
IProjectQuery,
IProjectStore,
IUpdateProjectEnvironmentConfig,
} from '../types/stores/project-store';
import {
IProjectAccessModel,
IRoleDescriptor,
@ -601,4 +606,17 @@ export default class ProjectService {
version: 1,
};
}
async getChangeRequestConfig(
projectId: string,
): Promise<IProjectEnvironmentConfig[]> {
return this.store.getChangeRequestConfigForProject(projectId);
}
async updateEnvironmentConfig(
projectId: string,
data: IUpdateProjectEnvironmentConfig,
): Promise<void> {
await this.store.updateProjectEnvironmentConfig(projectId, data);
}
}

View File

@ -347,6 +347,7 @@ export interface IProject {
updatedAt?: Date;
changeRequestsEnabled?: boolean;
}
export interface ICustomRole {
id: number;
name: string;

View File

@ -27,7 +27,13 @@ export interface IProjectQuery {
id?: string;
}
export interface IProjectEnvironmentWithChangeRequests {
export interface IProjectEnvironmentConfig {
environment: string;
type: string;
changeRequestsEnabled: boolean;
}
export interface IUpdateProjectEnvironmentConfig {
environment: string;
changeRequestsEnabled: boolean;
}
@ -50,13 +56,18 @@ export interface IProjectStore extends Store<IProject, string> {
getProjectsWithCounts(query?: IProjectQuery): Promise<IProjectWithCount[]>;
count(): Promise<number>;
getAll(query?: IProjectQuery): Promise<IProject[]>;
getProjectLinksForEnvironments(
environments: string[],
): Promise<IEnvironmentProjectLink[]>;
addEnvironmentToProjects(
environment: string,
projects: string[],
): Promise<void>;
getChangeRequestConfigForProject(
id: string,
): Promise<IProjectEnvironmentConfig[]>;
updateProjectEnvironmentConfig(
id: string,
data: IUpdateProjectEnvironmentConfig,
);
}