unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
87 lines • 3.84 kB
JavaScript
import Controller from '../../routes/controller.js';
import { UPDATE_FEATURE } from '../../types/permissions.js';
import { emptyResponse, getStandardResponses, } from '../../openapi/util/standard-responses.js';
import { createRequestSchema } from '../../openapi/util/create-request-schema.js';
const PATH = '/:projectId/features/:featureName/link';
const PATH_LINK = '/:projectId/features/:featureName/link/:linkId';
export default class FeatureLinkController extends Controller {
constructor(config, { transactionalFeatureLinkService, openApiService, }) {
super(config);
this.transactionalFeatureLinkService = transactionalFeatureLinkService;
this.openApiService = openApiService;
this.flagResolver = config.flagResolver;
this.route({
method: 'post',
path: PATH,
handler: this.createFeatureLink,
permission: UPDATE_FEATURE,
middleware: [
openApiService.validPath({
tags: ['Unstable'],
operationId: 'createFeatureLink',
summary: 'Create a feature link',
description: 'Create a new link for a feature.',
responses: {
204: emptyResponse,
...getStandardResponses(400, 401, 403, 415),
},
requestBody: createRequestSchema('featureLinkSchema'),
}),
],
});
this.route({
method: 'put',
path: PATH_LINK,
handler: this.updateFeatureLink,
permission: UPDATE_FEATURE,
middleware: [
openApiService.validPath({
tags: ['Unstable'],
operationId: 'updateFeatureLink',
summary: 'Update a feature link',
description: 'Update an existing feature link.',
responses: {
204: emptyResponse,
...getStandardResponses(400, 401, 403, 404, 415),
},
requestBody: createRequestSchema('featureLinkSchema'),
}),
],
});
this.route({
method: 'delete',
path: PATH_LINK,
handler: this.deleteFeatureLink,
acceptAnyContentType: true,
permission: UPDATE_FEATURE,
middleware: [
openApiService.validPath({
tags: ['Unstable'],
operationId: 'deleteFeatureLink',
summary: 'Delete a feature link',
description: 'Delete a feature link by id.',
responses: {
204: emptyResponse,
...getStandardResponses(401, 403, 404),
},
}),
],
});
}
async createFeatureLink(req, res) {
const { projectId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => service.createLink(projectId, { ...req.body, featureName }, req.audit));
res.status(204).end();
}
async updateFeatureLink(req, res) {
const { projectId, linkId, featureName } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => service.updateLink({ projectId, linkId }, { ...req.body, featureName }, req.audit));
res.status(204).end();
}
async deleteFeatureLink(req, res) {
const { projectId, linkId } = req.params;
await this.transactionalFeatureLinkService.transactional((service) => service.deleteLink({ projectId, linkId }, req.audit));
res.status(204).end();
}
}
//# sourceMappingURL=feature-link-controller.js.map