n8n
Version:
n8n Workflow Automation Tool
163 lines • 8.44 kB
JavaScript
"use strict";
const api_types_1 = require("@n8n/api-types");
const di_1 = require("@n8n/di");
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 data_table_service_1 = require("../../../../modules/data-table/data-table.service");
const data_table_not_found_error_1 = require("../../../../modules/data-table/errors/data-table-not-found.error");
const data_table_validation_error_1 = require("../../../../modules/data-table/errors/data-table-validation.error");
const global_middleware_1 = require("../../shared/middlewares/global.middleware");
const pagination_service_1 = require("../../shared/services/pagination.service");
const handleError = (error) => {
if (error instanceof data_table_not_found_error_1.DataTableNotFoundError) {
throw new not_found_error_1.NotFoundError(error.message);
}
if (error instanceof data_table_validation_error_1.DataTableValidationError) {
throw new bad_request_error_1.BadRequestError(error.message);
}
throw error;
};
const stringifyQuery = (query) => {
const result = {};
for (const [key, value] of Object.entries(query)) {
if (value !== undefined && value !== null) {
result[key] = String(value);
}
}
return result;
};
const dataTableRowsHandlers = {
getDataTableRows: [
(0, global_middleware_1.publicApiScope)('dataTableRow:read'),
(0, global_middleware_1.projectScope)('dataTable:readRow', 'dataTable'),
global_middleware_1.validCursor,
async (req, res) => {
try {
const { dataTableId } = req.params;
const payload = api_types_1.PublicApiListDataTableContentQueryDto.safeParse(stringifyQuery(req.query));
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message || 'Invalid query parameters');
}
const { offset, limit, filter, sortBy, search } = payload.data;
const projectId = await di_1.Container.get(data_table_service_1.DataTableService).getProjectIdForDataTable(dataTableId);
const result = await di_1.Container.get(data_table_service_1.DataTableService).getManyRowsAndCount(dataTableId, projectId, {
skip: offset,
take: limit,
filter,
sortBy,
search,
});
return res.json({
data: result.data,
nextCursor: (0, pagination_service_1.encodeNextCursor)({
offset,
limit,
numberOfTotalRecords: result.count,
}),
});
}
catch (error) {
return handleError(error);
}
},
],
insertDataTableRows: [
(0, global_middleware_1.publicApiScope)('dataTableRow:create'),
(0, global_middleware_1.projectScope)('dataTable:writeRow', 'dataTable'),
async (req, res) => {
try {
const { dataTableId } = req.params;
const payload = api_types_1.AddDataTableRowsDto.safeParse(req.body);
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message || 'Invalid request body');
}
const projectId = await di_1.Container.get(data_table_service_1.DataTableService).getProjectIdForDataTable(dataTableId);
const result = await di_1.Container.get(data_table_service_1.DataTableService).insertRows(dataTableId, projectId, payload.data.data, payload.data.returnType);
return res.json(result);
}
catch (error) {
return handleError(error);
}
},
],
updateDataTableRows: [
(0, global_middleware_1.publicApiScope)('dataTableRow:update'),
(0, global_middleware_1.projectScope)('dataTable:writeRow', 'dataTable'),
async (req, res) => {
try {
const { dataTableId } = req.params;
const payload = api_types_1.UpdateDataTableRowDto.safeParse(req.body);
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message || 'Invalid request body');
}
const projectId = await di_1.Container.get(data_table_service_1.DataTableService).getProjectIdForDataTable(dataTableId);
const service = di_1.Container.get(data_table_service_1.DataTableService);
const { filter, data, returnData = false, dryRun = false } = payload.data;
const params = { filter, data };
const result = dryRun
? await service.updateRows(dataTableId, projectId, params, returnData, true)
: returnData
? await service.updateRows(dataTableId, projectId, params, true, false)
: await service.updateRows(dataTableId, projectId, params, false, false);
return res.json(result);
}
catch (error) {
return handleError(error);
}
},
],
upsertDataTableRow: [
(0, global_middleware_1.publicApiScope)('dataTableRow:upsert'),
(0, global_middleware_1.projectScope)('dataTable:writeRow', 'dataTable'),
async (req, res) => {
try {
const { dataTableId } = req.params;
const payload = api_types_1.UpsertDataTableRowDto.safeParse(req.body);
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message || 'Invalid request body');
}
const projectId = await di_1.Container.get(data_table_service_1.DataTableService).getProjectIdForDataTable(dataTableId);
const service = di_1.Container.get(data_table_service_1.DataTableService);
const { filter, data, returnData = false, dryRun = false } = payload.data;
const params = { filter, data };
const result = dryRun
? await service.upsertRow(dataTableId, projectId, params, returnData, true)
: returnData
? await service.upsertRow(dataTableId, projectId, params, true, false)
: await service.upsertRow(dataTableId, projectId, params, false, false);
return res.json(result);
}
catch (error) {
return handleError(error);
}
},
],
deleteDataTableRows: [
(0, global_middleware_1.publicApiScope)('dataTableRow:delete'),
(0, global_middleware_1.projectScope)('dataTable:writeRow', 'dataTable'),
async (req, res) => {
try {
const { dataTableId } = req.params;
const payload = api_types_1.DeleteDataTableRowsDto.safeParse(stringifyQuery(req.query));
if (!payload.success) {
throw new bad_request_error_1.BadRequestError(payload.error.errors[0]?.message || 'Invalid query parameters');
}
const projectId = await di_1.Container.get(data_table_service_1.DataTableService).getProjectIdForDataTable(dataTableId);
const service = di_1.Container.get(data_table_service_1.DataTableService);
const { filter, returnData = false, dryRun = false } = payload.data;
const params = { filter };
const result = dryRun
? await service.deleteRows(dataTableId, projectId, params, returnData, true)
: returnData
? await service.deleteRows(dataTableId, projectId, params, true, false)
: await service.deleteRows(dataTableId, projectId, params, false, false);
return res.json(result);
}
catch (error) {
return handleError(error);
}
},
],
};
module.exports = dataTableRowsHandlers;
//# sourceMappingURL=data-tables.rows.handler.js.map