2021-01-19 10:42:45 +01:00
|
|
|
'use strict';
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
import { Request, Response } from 'express';
|
|
|
|
import Controller from '../controller';
|
|
|
|
import { IUnleashConfig } from '../../types/option';
|
|
|
|
import { IUnleashServices } from '../../types/services';
|
|
|
|
import { Logger } from '../../logger';
|
|
|
|
import AddonService from '../../services/addon-service';
|
2021-01-19 10:42:45 +01:00
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
import extractUser from '../../extract-user';
|
|
|
|
import { handleErrors } from './util';
|
2021-05-02 20:58:02 +02:00
|
|
|
import { CREATE_ADDON, UPDATE_ADDON, DELETE_ADDON } from '../../types/permissions';
|
2021-01-19 10:42:45 +01:00
|
|
|
|
|
|
|
class AddonController extends Controller {
|
2021-04-22 10:07:10 +02:00
|
|
|
private logger: Logger;
|
|
|
|
|
|
|
|
private addonService: AddonService;
|
|
|
|
|
|
|
|
constructor(
|
|
|
|
config: IUnleashConfig,
|
|
|
|
{ addonService }: Pick<IUnleashServices, 'addonService'>,
|
|
|
|
) {
|
2021-01-19 10:42:45 +01:00
|
|
|
super(config);
|
|
|
|
this.logger = config.getLogger('/admin-api/addon.js');
|
|
|
|
this.addonService = addonService;
|
|
|
|
|
|
|
|
this.get('/', this.getAddons);
|
|
|
|
this.post('/', this.createAddon, CREATE_ADDON);
|
|
|
|
this.get('/:id', this.getAddon);
|
|
|
|
this.put('/:id', this.updateAddon, UPDATE_ADDON);
|
|
|
|
this.delete('/:id', this.deleteAddon, DELETE_ADDON);
|
|
|
|
}
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
async getAddons(req: Request, res: Response): Promise<void> {
|
2021-01-19 10:42:45 +01:00
|
|
|
try {
|
|
|
|
const addons = await this.addonService.getAddons();
|
|
|
|
const providers = await this.addonService.getProviderDefinition();
|
|
|
|
res.json({ addons, providers });
|
|
|
|
} catch (error) {
|
|
|
|
handleErrors(res, this.logger, error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
async getAddon(req: Request, res: Response): Promise<void> {
|
2021-01-19 10:42:45 +01:00
|
|
|
const { id } = req.params;
|
|
|
|
try {
|
|
|
|
const addon = await this.addonService.getAddon(id);
|
|
|
|
res.json(addon);
|
|
|
|
} catch (error) {
|
|
|
|
handleErrors(res, this.logger, error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
async updateAddon(req: Request, res: Response): Promise<void> {
|
2021-01-19 10:42:45 +01:00
|
|
|
const { id } = req.params;
|
|
|
|
const createdBy = extractUser(req);
|
|
|
|
const data = req.body;
|
|
|
|
|
|
|
|
try {
|
|
|
|
const addon = await this.addonService.updateAddon(
|
|
|
|
id,
|
|
|
|
data,
|
|
|
|
createdBy,
|
|
|
|
);
|
|
|
|
res.status(200).json(addon);
|
|
|
|
} catch (error) {
|
|
|
|
handleErrors(res, this.logger, error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
async createAddon(req: Request, res: Response): Promise<void> {
|
2021-01-19 10:42:45 +01:00
|
|
|
const createdBy = extractUser(req);
|
|
|
|
const data = req.body;
|
|
|
|
try {
|
|
|
|
const addon = await this.addonService.createAddon(data, createdBy);
|
|
|
|
res.status(201).json(addon);
|
|
|
|
} catch (error) {
|
|
|
|
handleErrors(res, this.logger, error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-04-22 10:07:10 +02:00
|
|
|
async deleteAddon(req: Request, res: Response): Promise<void> {
|
2021-01-19 10:42:45 +01:00
|
|
|
const { id } = req.params;
|
|
|
|
const username = extractUser(req);
|
|
|
|
try {
|
|
|
|
await this.addonService.removeAddon(id, username);
|
|
|
|
res.status(200).end();
|
|
|
|
} catch (error) {
|
|
|
|
handleErrors(res, this.logger, error);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-04-22 10:07:10 +02:00
|
|
|
export default AddonController;
|
2021-01-19 10:42:45 +01:00
|
|
|
module.exports = AddonController;
|