1
0
mirror of https://github.com/Unleash/unleash.git synced 2025-06-04 01:18:20 +02:00

chore(modernize): Admin ArchiveController

This commit is contained in:
ivaosthu 2018-11-30 08:24:22 +01:00 committed by Ivar Conradi Østhus
parent a7382419d5
commit be5cf15cf8
3 changed files with 40 additions and 40 deletions

View File

@ -4,49 +4,43 @@ const { Router } = require('express');
const logger = require('../../logger')('/admin-api/archive.js'); const logger = require('../../logger')('/admin-api/archive.js');
const { FEATURE_REVIVED } = require('../../event-type'); const { FEATURE_REVIVED } = require('../../event-type');
const ValidationError = require('../../error/validation-error');
const validateRequest = require('../../error/validate-request');
const extractUser = require('../../extract-user'); const extractUser = require('../../extract-user');
const handleErrors = (req, res, error) => { class ArchiveController {
switch (error.constructor) { constructor({ featureToggleStore, eventStore }) {
case ValidationError:
return res
.status(400)
.json(req.validationErrors())
.end();
default:
logger.error('Server failed executing request', error);
return res.status(500).end();
}
};
module.exports.router = function(config) {
const { featureToggleStore, eventStore } = config.stores;
const router = Router(); const router = Router();
this._router = router;
this.featureToggleStore = featureToggleStore;
this.eventStore = eventStore;
router.get('/features', (req, res) => { router.get('/features', this.getArchivedFeatures.bind(this));
featureToggleStore.getArchivedFeatures().then(archivedFeatures => { router.post('/revive/:name', this.reviveFeatureToggle.bind(this));
res.json({ features: archivedFeatures }); }
});
});
router.post('/revive/:name', (req, res) => { async getArchivedFeatures(req, res) {
req.checkParams('name', 'Name is required').notEmpty(); const features = await this.featureToggleStore.getArchivedFeatures();
res.json({ features });
}
async reviveFeatureToggle(req, res) {
const userName = extractUser(req); const userName = extractUser(req);
validateRequest(req) try {
.then(() => await this.eventStore.store({
eventStore.store({
type: FEATURE_REVIVED, type: FEATURE_REVIVED,
createdBy: userName, createdBy: userName,
data: { name: req.params.name }, data: { name: req.params.name },
})
)
.then(() => res.status(200).end())
.catch(error => handleErrors(req, res, error));
}); });
res.status(200).end();
} catch (error) {
logger.error('Server failed executing request', error);
return res.status(500).end();
}
}
return router; router() {
}; return this._router;
}
}
module.exports = ArchiveController;

View File

@ -86,3 +86,9 @@ test('should create event when reviving toggle', async t => {
t.is(events[0].data.name, name); t.is(events[0].data.name, name);
t.is(events[0].createdBy, 'unknown'); t.is(events[0].createdBy, 'unknown');
}); });
test('should require toggle name when reviving', t => {
t.plan(0);
const { request, base } = getSetup();
return request.post(`${base}/api/admin/archive/revive/`).expect(404);
});

View File

@ -3,7 +3,7 @@
const { Router } = require('express'); const { Router } = require('express');
const features = require('./feature.js'); const features = require('./feature.js');
const featureArchive = require('./archive.js'); const ArchiveController = require('./archive.js');
const events = require('./event.js'); const events = require('./event.js');
const strategies = require('./strategy'); const strategies = require('./strategy');
const metrics = require('./metrics'); const metrics = require('./metrics');
@ -17,7 +17,7 @@ class AdminApi {
router.get('/', (req, res) => res.json(apiDef)); router.get('/', (req, res) => res.json(apiDef));
router.use('/features', features.router(config)); router.use('/features', features.router(config));
router.use('/archive', featureArchive.router(config)); router.use('/archive', new ArchiveController(config.stores).router());
router.use('/strategies', strategies.router(config)); router.use('/strategies', strategies.router(config));
router.use('/events', events.router(config)); router.use('/events', events.router(config));
router.use('/metrics', metrics.router(config)); router.use('/metrics', metrics.router(config));