unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
166 lines • 7.18 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const controller_1 = __importDefault(require("../../controller"));
const permissions_1 = require("../../../types/permissions");
const extract_user_1 = require("../../../util/extract-user");
const create_request_schema_1 = require("../../../openapi/util/create-request-schema");
const create_response_schema_1 = require("../../../openapi/util/create-response-schema");
const PREFIX = '/:projectId/features/:featureName/variants';
const ENV_PREFIX = '/:projectId/features/:featureName/environments/:environment/variants';
class VariantsController extends controller_1.default {
constructor(config, { featureToggleService, openApiService, }) {
super(config);
this.logger = config.getLogger('admin-api/project/variants.ts');
this.featureService = featureToggleService;
this.route({
method: 'get',
path: PREFIX,
permission: permissions_1.NONE,
handler: this.getVariants,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'getFeatureVariants',
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
this.route({
method: 'patch',
path: PREFIX,
permission: permissions_1.UPDATE_FEATURE_VARIANTS,
handler: this.patchVariants,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'patchFeatureVariants',
requestBody: (0, create_request_schema_1.createRequestSchema)('patchesSchema'),
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
this.route({
method: 'put',
path: PREFIX,
permission: permissions_1.UPDATE_FEATURE_VARIANTS,
handler: this.overwriteVariants,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'overwriteFeatureVariants',
requestBody: (0, create_request_schema_1.createRequestSchema)('variantsSchema'),
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
this.route({
method: 'get',
path: ENV_PREFIX,
permission: permissions_1.NONE,
handler: this.getVariantsOnEnv,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'getEnvironmentFeatureVariants',
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
this.route({
method: 'patch',
path: ENV_PREFIX,
permission: permissions_1.UPDATE_FEATURE_ENVIRONMENT_VARIANTS,
handler: this.patchVariantsOnEnv,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'patchEnvironmentsFeatureVariants',
requestBody: (0, create_request_schema_1.createRequestSchema)('patchesSchema'),
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
this.route({
method: 'put',
path: ENV_PREFIX,
permission: permissions_1.UPDATE_FEATURE_ENVIRONMENT_VARIANTS,
handler: this.overwriteVariantsOnEnv,
middleware: [
openApiService.validPath({
tags: ['Features'],
operationId: 'overwriteEnvironmentFeatureVariants',
requestBody: (0, create_request_schema_1.createRequestSchema)('variantsSchema'),
responses: {
200: (0, create_response_schema_1.createResponseSchema)('featureVariantsSchema'),
},
}),
],
});
}
/**
* @deprecated - Variants should be fetched from featureService.getVariantsForEnv (since variants are now; since 4.18, connected to environments)
* @param req
* @param res
*/
async getVariants(req, res) {
const { featureName } = req.params;
const variants = await this.featureService.getVariants(featureName);
res.status(200).json({ version: 1, variants: variants || [] });
}
async patchVariants(req, res) {
const { projectId, featureName } = req.params;
const userName = (0, extract_user_1.extractUsername)(req);
const updatedFeature = await this.featureService.updateVariants(featureName, projectId, req.body, userName);
res.status(200).json({
version: 1,
variants: updatedFeature.variants,
});
}
async overwriteVariants(req, res) {
const { projectId, featureName } = req.params;
const userName = (0, extract_user_1.extractUsername)(req);
const updatedFeature = await this.featureService.saveVariants(featureName, projectId, req.body, userName);
res.status(200).json({
version: 1,
variants: updatedFeature.variants,
});
}
async getVariantsOnEnv(req, res) {
const { featureName, environment } = req.params;
const variants = await this.featureService.getVariantsForEnv(featureName, environment);
res.status(200).json({ version: 1, variants: variants || [] });
}
async patchVariantsOnEnv(req, res) {
const { projectId, featureName, environment } = req.params;
const userName = (0, extract_user_1.extractUsername)(req);
const variants = await this.featureService.updateVariantsOnEnv(featureName, projectId, environment, req.body, userName);
res.status(200).json({
version: 1,
variants,
});
}
async overwriteVariantsOnEnv(req, res) {
const { featureName, environment, projectId } = req.params;
const userName = (0, extract_user_1.extractUsername)(req);
const variants = await this.featureService.saveVariantsOnEnv(projectId, featureName, environment, req.body, userName);
res.status(200).json({
version: 1,
variants: variants,
});
}
}
exports.default = VariantsController;
//# sourceMappingURL=variants.js.map