39948-vm/backend/src/routes/projects.js

42 lines
1.1 KiB
JavaScript

const { createEntityRouter } = require('../factories/router.factory');
const ProjectsService = require('../services/projects');
const ProjectsDBApi = require('../db/api/projects');
const { wrapAsync, commonErrorHandler } = require('../helpers');
const { validateRequest } = require('../middlewares/validate-request');
const { projects: projectSchemas } = require('../validators/request-schemas');
// Create base router with factory (includes all standard CRUD endpoints)
const router = createEntityRouter('projects', ProjectsService, ProjectsDBApi, {
permissionEntity: 'projects',
csvFields: [
'id',
'name',
'slug',
'description',
'logo_url',
'favicon_url',
'og_image_url',
],
validation: {
create: projectSchemas.create,
update: projectSchemas.update,
},
});
// Custom endpoint: Clone project
router.post(
'/:id/clone',
validateRequest(projectSchemas.clone),
wrapAsync(async (req, res) => {
const payload = await ProjectsService.cloneFromProject(
req.params.id,
req.currentUser,
);
res.status(200).send(payload);
}),
);
router.use('/', commonErrorHandler);
module.exports = router;