2021-07-07 10:46:50 +02:00
|
|
|
import { Request, Response } from 'express';
|
|
|
|
import Controller from '../controller';
|
|
|
|
import { IUnleashServices } from '../../types/services';
|
|
|
|
import { IUnleashConfig } from '../../types/option';
|
|
|
|
import { IEnvironment } from '../../types/model';
|
|
|
|
import EnvironmentService from '../../services/environment-service';
|
|
|
|
import { Logger } from '../../logger';
|
|
|
|
import { ADMIN } from '../../types/permissions';
|
|
|
|
|
|
|
|
interface EnvironmentParam {
|
|
|
|
name: string;
|
|
|
|
}
|
|
|
|
|
|
|
|
export class EnvironmentsController extends Controller {
|
|
|
|
private logger: Logger;
|
|
|
|
|
|
|
|
private service: EnvironmentService;
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
config: IUnleashConfig,
|
|
|
|
{ environmentService }: Pick<IUnleashServices, 'environmentService'>,
|
|
|
|
) {
|
|
|
|
super(config);
|
|
|
|
this.logger = config.getLogger('admin-api/environments-controller.ts');
|
|
|
|
this.service = environmentService;
|
|
|
|
this.get('/', this.getAll);
|
|
|
|
this.post('/', this.createEnv, ADMIN);
|
|
|
|
this.get('/:name', this.getEnv);
|
|
|
|
this.put('/:name', this.updateEnv, ADMIN);
|
|
|
|
this.delete('/:name', this.deleteEnv, ADMIN);
|
|
|
|
}
|
|
|
|
|
|
|
|
async getAll(req: Request, res: Response): Promise<void> {
|
2021-09-13 10:23:57 +02:00
|
|
|
const environments = await this.service.getAll();
|
|
|
|
res.status(200).json({ version: 1, environments });
|
2021-07-07 10:46:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async createEnv(
|
|
|
|
req: Request<any, any, IEnvironment, any>,
|
|
|
|
res: Response,
|
|
|
|
): Promise<void> {
|
2021-09-13 10:23:57 +02:00
|
|
|
const environment = await this.service.create(req.body);
|
|
|
|
res.status(201).json(environment);
|
2021-07-07 10:46:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async getEnv(
|
|
|
|
req: Request<EnvironmentParam, any, any, any>,
|
|
|
|
res: Response,
|
|
|
|
): Promise<void> {
|
|
|
|
const { name } = req.params;
|
2021-09-13 10:23:57 +02:00
|
|
|
const env = await this.service.get(name);
|
|
|
|
res.status(200).json(env);
|
2021-07-07 10:46:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async updateEnv(
|
|
|
|
req: Request<EnvironmentParam, any, IEnvironment, any>,
|
|
|
|
res: Response,
|
|
|
|
): Promise<void> {
|
|
|
|
const { name } = req.params;
|
2021-09-13 10:23:57 +02:00
|
|
|
const env = await this.service.update(name, req.body);
|
|
|
|
res.status(200).json(env);
|
2021-07-07 10:46:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
async deleteEnv(
|
|
|
|
req: Request<EnvironmentParam, any, any, any>,
|
|
|
|
res: Response,
|
|
|
|
): Promise<void> {
|
|
|
|
const { name } = req.params;
|
2021-09-13 10:23:57 +02:00
|
|
|
await this.service.delete(name);
|
|
|
|
res.status(200).end();
|
2021-07-07 10:46:50 +02:00
|
|
|
}
|
|
|
|
}
|