import { Request, Response } from 'express'; import { handleErrors } from './util'; import { IUnleashConfig } from '../../types/option'; import { IUnleashServices } from '../../types/services'; import { Logger } from '../../logger'; import Controller from '../controller'; import extractUser from '../../extract-user'; import { DELETE_FEATURE, UPDATE_FEATURE } from '../../types/permissions'; import FeatureToggleServiceV2 from '../../services/feature-toggle-service-v2'; export default class ArchiveController extends Controller { private readonly logger: Logger; private featureService: FeatureToggleServiceV2; constructor( config: IUnleashConfig, { featureToggleServiceV2, }: Pick, ) { super(config); this.logger = config.getLogger('/admin-api/archive.js'); this.featureService = featureToggleServiceV2; this.get('/features', this.getArchivedFeatures); this.delete('/:featureName', this.deleteFeature, DELETE_FEATURE); this.post( '/revive/:featureName', this.reviveFeatureToggle, UPDATE_FEATURE, ); } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types async getArchivedFeatures(req, res): Promise { try { const features = await this.featureService.getMetadataForAllFeatures(true); res.json({ version: 2, features }); } catch (err) { handleErrors(res, this.logger, err); } } async deleteFeature( req: Request, res: Response, ): Promise { const { featureName } = req.params; const user = extractUser(req); try { await this.featureService.deleteFeature(featureName, user); res.status(200).end(); } catch (error) { handleErrors(res, this.logger, error); } } // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types async reviveFeatureToggle(req, res): Promise { const userName = extractUser(req); const { featureName } = req.params; try { await this.featureService.reviveToggle(featureName, userName); res.status(200).end(); } catch (error) { handleErrors(res, this.logger, error); } } } module.exports = ArchiveController;