diff --git a/src/lib/routes/admin-api/archive.ts b/src/lib/routes/admin-api/archive.ts index 1b90495fda..09049a8b67 100644 --- a/src/lib/routes/admin-api/archive.ts +++ b/src/lib/routes/admin-api/archive.ts @@ -39,7 +39,7 @@ export default class ArchiveController extends Controller { const features = await this.featureService.getMetadataForAllFeatures( true, ); - res.json({ version: 2, features }); + res.json({ version: 2, features, maturity: 'deprecated' }); } async deleteFeature( diff --git a/src/lib/routes/admin-api/feature.ts b/src/lib/routes/admin-api/feature.ts index 0823fe629f..879c4ded35 100644 --- a/src/lib/routes/admin-api/feature.ts +++ b/src/lib/routes/admin-api/feature.ts @@ -96,7 +96,7 @@ class FeatureController extends Controller { const query = await this.prepQuery(req.query); const features = await this.featureService2.getFeatureToggles(query); - res.json({ version, features }); + res.json({ version, features, maturity: 'deprecated' }); } async getToggle( diff --git a/src/lib/routes/admin-api/project/archive.ts b/src/lib/routes/admin-api/project/archive.ts new file mode 100644 index 0000000000..dcf8393d8b --- /dev/null +++ b/src/lib/routes/admin-api/project/archive.ts @@ -0,0 +1,68 @@ +import { Request, Response } from 'express'; +import { IUnleashConfig } from '../../../types/option'; +import { IUnleashServices } from '../../../types/services'; +import { Logger } from '../../../logger'; + +import Controller from '../../controller'; + +import { extractUsername } from '../../../util/extract-user'; +import { DELETE_FEATURE, UPDATE_FEATURE } from '../../../types/permissions'; +import FeatureToggleServiceV2 from '../../../services/feature-toggle-service-v2'; +import { IAuthRequest } from '../../unleash-types'; + +const PATH = `/:projectId/archived-features`; + +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/project/archive.ts'); + this.featureService = featureToggleServiceV2; + + this.get(`${PATH}`, this.getArchivedFeatures); + this.delete(`${PATH}/:featureName`, this.deleteFeature, DELETE_FEATURE); + this.post( + `${PATH}/:featureName/revive`, + this.reviveFeatureToggle, + UPDATE_FEATURE, + ); + } + + async getArchivedFeatures(req: Request, res: Response): Promise { + const { projectId } = req.params; + const features = await this.featureService.getFeatureOverview( + projectId, + true, + ); + res.json({ version: 1, features }); + } + + async deleteFeature( + req: IAuthRequest, + res: Response, + ): Promise { + const { featureName } = req.params; + const user = extractUsername(req); + // TODO: validate projectId + await this.featureService.deleteFeature(featureName, user); + res.status(200).end(); + } + + async reviveFeatureToggle(req: IAuthRequest, res: Response): Promise { + const userName = extractUsername(req); + const { featureName } = req.params; + // TODO: validate projectId + await this.featureService.reviveToggle(featureName, userName); + res.status(200).end(); + } +} + +module.exports = ArchiveController;