unleash-server
Version:
Unleash is an enterprise ready feature flag service. It provides different strategies for handling feature flags.
65 lines • 3.15 kB
JavaScript
import { NONE, serializeDates, } from '../../types/index.js';
import { createResponseSchema, getStandardResponses, personalDashboardSchema, } from '../../openapi/index.js';
import Controller from '../../routes/controller.js';
import { personalDashboardProjectDetailsSchema, } from '../../openapi/spec/personal-dashboard-project-details-schema.js';
export default class PersonalDashboardController extends Controller {
constructor(config, { openApiService, personalDashboardService, }) {
super(config);
this.openApiService = openApiService;
this.personalDashboardService = personalDashboardService;
this.route({
method: 'get',
path: '',
handler: this.getPersonalDashboard,
permission: NONE,
middleware: [
openApiService.validPath({
tags: ['Unstable'],
summary: 'Get personal dashboard',
description: 'Return all projects and flags that are relevant to the user.',
operationId: 'getPersonalDashboard',
responses: {
200: createResponseSchema('personalDashboardSchema'),
...getStandardResponses(401, 403, 404),
},
}),
],
});
this.route({
method: 'get',
path: '/:projectId',
handler: this.getPersonalDashboardProjectDetails,
permission: NONE,
middleware: [
openApiService.validPath({
tags: ['Unstable'],
summary: 'Get personal project details',
description: 'Return personal dashboard project events, owners, user roles and onboarding status',
operationId: 'getPersonalDashboardProjectDetails',
responses: {
200: createResponseSchema('personalDashboardProjectDetailsSchema'),
...getStandardResponses(401, 403, 404),
},
}),
],
});
}
async getPersonalDashboard(req, res) {
const user = req.user;
const [flags, projects, projectOwners, admins] = await Promise.all([
this.personalDashboardService.getPersonalFeatures(user.id),
this.personalDashboardService.getPersonalProjects(user.id),
this.personalDashboardService.getProjectOwners(user.id),
this.personalDashboardService.getAdmins(),
]);
this.openApiService.respondWithValidation(200, res, personalDashboardSchema.$id, { projects, flags, projectOwners, admins });
}
async getPersonalDashboardProjectDetails(req, res) {
const user = req.user;
const projectDetails = await this.personalDashboardService.getPersonalProjectDetails(user.id, req.params.projectId);
this.openApiService.respondWithValidation(200, res, personalDashboardProjectDetailsSchema.$id, serializeDates({
...projectDetails,
}));
}
}
//# sourceMappingURL=personal-dashboard-controller.js.map