UNPKG

n8n

Version:

n8n Workflow Automation Tool

153 lines 7.37 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; const api_types_1 = require("@n8n/api-types"); const db_1 = require("@n8n/db"); const di_1 = require("@n8n/di"); const pick_1 = __importDefault(require("lodash/pick")); const project_controller_1 = require("../../../../controllers/project.controller"); const bad_request_error_1 = require("../../../../errors/response-errors/bad-request.error"); const not_found_error_1 = require("../../../../errors/response-errors/not-found.error"); const project_service_ee_1 = require("../../../../services/project.service.ee"); const global_middleware_1 = require("../../shared/middlewares/global.middleware"); const pagination_service_1 = require("../../shared/services/pagination.service"); const projectHandlers = { createProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:create' }), async (req, res) => { const payload = api_types_1.CreateProjectDto.safeParse(req.body); if (payload.error) { throw new bad_request_error_1.BadRequestError(payload.error.errors[0].message); } const project = await di_1.Container.get(project_controller_1.ProjectController).createProject(req, res, payload.data); return res.status(201).json(project); }, ], updateProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:update' }), async (req, res) => { const payload = api_types_1.UpdateProjectWithRelationsDto.safeParse(req.body); if (payload.error) { throw new bad_request_error_1.BadRequestError(payload.error.errors[0].message); } await di_1.Container.get(project_controller_1.ProjectController).updateProject(req, res, payload.data, req.params.projectId); return res.status(204).send(); }, ], deleteProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:delete' }), async (req, res) => { const query = api_types_1.DeleteProjectDto.safeParse(req.query); if (query.error) { throw new bad_request_error_1.BadRequestError(query.error.errors[0].message); } await di_1.Container.get(project_controller_1.ProjectController).deleteProject(req, res, query.data, req.params.projectId); return res.status(204).send(); }, ], getProjects: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:list' }), global_middleware_1.validCursor, async (req, res) => { const { offset = 0, limit = 100 } = req.query; const [projects, count] = await di_1.Container.get(db_1.ProjectRepository).findAndCount({ skip: offset, take: limit, }); return res.json({ data: projects, nextCursor: (0, pagination_service_1.encodeNextCursor)({ offset, limit, numberOfTotalRecords: count, }), }); }, ], getProjectUsers: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'user:list' }), global_middleware_1.validCursor, async (req, res) => { const { projectId } = req.params; const offset = Number(req.query.offset) || 0; const limit = Number(req.query.limit) || 100; const projectService = di_1.Container.get(project_service_ee_1.ProjectService); const project = await projectService.getProjectWithScope(req.user, projectId, [ 'project:list', ]); if (!project) { throw new not_found_error_1.NotFoundError(`Could not find project with ID "${projectId}"`); } const projectRelationRepository = di_1.Container.get(db_1.ProjectRelationRepository); const [relations, count] = await projectRelationRepository.findAndCount({ where: { projectId }, relations: { user: true, role: true }, skip: offset, take: limit, }); const memberFields = [ 'id', 'email', 'firstName', 'lastName', 'createdAt', 'updatedAt', ]; const data = relations.map((relation) => ({ ...(0, pick_1.default)(relation.user, memberFields), role: relation.role?.slug ?? null, })); return res.json({ data, nextCursor: (0, pagination_service_1.encodeNextCursor)({ offset, limit, numberOfTotalRecords: count, }), }); }, ], addUsersToProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:update' }), async (req, res) => { const payload = api_types_1.AddUsersToProjectDto.safeParse(req.body); if (payload.error) { throw new bad_request_error_1.BadRequestError(payload.error.errors[0].message); } await di_1.Container.get(project_service_ee_1.ProjectService).addUsersToProject(req.params.projectId, payload.data.relations); return res.status(201).send(); }, ], changeUserRoleInProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:update' }), async (req, res) => { const payload = api_types_1.ChangeUserRoleInProject.safeParse(req.body); if (payload.error) { throw new bad_request_error_1.BadRequestError(payload.error.errors[0].message); } const { projectId, userId } = req.params; const { role } = payload.data; await di_1.Container.get(project_service_ee_1.ProjectService).changeUserRoleInProject(projectId, userId, role); return res.status(204).send(); }, ], deleteUserFromProject: [ (0, global_middleware_1.isLicensed)('feat:projectRole:admin'), (0, global_middleware_1.apiKeyHasScopeWithGlobalScopeFallback)({ scope: 'project:update' }), async (req, res) => { const { projectId, userId } = req.params; await di_1.Container.get(project_service_ee_1.ProjectService).deleteUserFromProject(projectId, userId); return res.status(204).send(); }, ], }; module.exports = projectHandlers; //# sourceMappingURL=projects.handler.js.map