From a6481d1685d97adaff0cf09e13d986bd2c571cce Mon Sep 17 00:00:00 2001 From: mike12345567 Date: Fri, 12 Nov 2021 18:39:33 +0000 Subject: [PATCH] Adding in existing external table import. --- .../src/api/controllers/table/external.js | 33 +++++++++++++++++-- .../src/api/controllers/table/internal.js | 1 + 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/packages/server/src/api/controllers/table/external.js b/packages/server/src/api/controllers/table/external.js index 627a425600..f86ff7266c 100644 --- a/packages/server/src/api/controllers/table/external.js +++ b/packages/server/src/api/controllers/table/external.js @@ -17,6 +17,8 @@ const { } = require("../../../constants") const { makeExternalQuery } = require("../../../integrations/base/utils") const { cloneDeep } = require("lodash/fp") +const csvParser = require("../../../utilities/csvParser") +const { save: rowSave } = require("../row/external") async function makeTableRequest( datasource, @@ -281,6 +283,33 @@ exports.destroy = async function (ctx) { } exports.bulkImport = async function (ctx) { - ctx.status = 200 - ctx.body = {} + const appId = ctx.appId + const table = await getTable(appId, ctx.params.tableId) + const { dataImport } = ctx.request.body + if (!dataImport || !dataImport.schema || !dataImport.csvString) { + ctx.throw(400, "Provided data import information is invalid.") + } + const rows = await csvParser.transform({ + ...dataImport, + existingTable: table, + }) + const promises = [] + for (let row of rows) { + const rowSaveCtx = { + appId, + params: { + tableId: table._id, + }, + request: { + body: { + ...row, + tableId: table._id, + }, + }, + } + promises.push(rowSave(rowSaveCtx)) + } + // don't error if some error, as some will have been imported + await Promise.allSettled(promises) + return table } diff --git a/packages/server/src/api/controllers/table/internal.js b/packages/server/src/api/controllers/table/internal.js index da9f0ef500..660618aef0 100644 --- a/packages/server/src/api/controllers/table/internal.js +++ b/packages/server/src/api/controllers/table/internal.js @@ -151,4 +151,5 @@ exports.bulkImport = async function (ctx) { const table = await getTable(appId, ctx.params.tableId) const { dataImport } = ctx.request.body await handleDataImport(appId, ctx.user, table, dataImport) + return table }