Browse Source

cleaner parsing

master
Martin McKeaveney 6 years ago
parent
commit
5e6cbe3b6d
  1. 6
      packages/server/src/api/controllers/model.js
  2. 29
      packages/server/src/utilities/csvParser.js

6
packages/server/src/api/controllers/model.js

@ -4,6 +4,7 @@ const {
getRecordParams,
getModelParams,
generateModelID,
generateRecordID,
} = require("../../db/utils")
exports.fetch = async function(ctx) {
@ -83,7 +84,10 @@ exports.save = async function(ctx) {
// Populate the table with records imported from CSV in a bulk update
const data = await csvParser.transform(dataImport)
for (let row of data) row.modelId = modelToSave._id
for (let row of data) {
row._id = generateRecordID(modelToSave._id)
row.modelId = modelToSave._id
}
await db.bulkDocs(data)
}

29
packages/server/src/utilities/csvParser.js

@ -25,27 +25,18 @@ function parse(path, parsers) {
}
})
result.fromFile(path).subscribe(row => {
// For each CSV row
// parse all the columns that need parsed
// For each CSV row parse all the columns that need parsed
for (let key in parsers) {
// if the parsing has already failed for a column
// skip that column
if (
!schema[key] ||
!schema[key].success ||
schema[key].type === "omit"
) {
continue
}
// get the validator for the column type
const validator = VALIDATORS[parsers[key].type]
if (!schema[key] || schema[key].success) {
// get the validator for the column type
const validator = VALIDATORS[parsers[key].type]
try {
// allow null/undefined values
schema[key].success = !row[key] || !!validator(row[key])
} catch (err) {
schema[key].success = false
try {
// allow null/undefined values
schema[key].success = !row[key] || validator(row[key])
} catch (err) {
schema[key].success = false
}
}
}
})

Loading…
Cancel
Save