n8n
Version:
n8n Workflow Automation Tool
153 lines • 7.37 kB
JavaScript
"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