From b07a2c8a53a1b4dc7800297b49b84d30438bb6dd Mon Sep 17 00:00:00 2001 From: Julia Friesel <julia.friesel@gmail.com> Date: Thu, 9 Aug 2018 11:48:28 +0200 Subject: [PATCH] Move db operations back to db module --- db/index.js | 36 +++++++++++++++++++++-- lib/import-export/get-csv-column-names.js | 8 ++--- lib/import-export/import-from-csv.js | 32 ++++---------------- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/db/index.js b/db/index.js index ea76bd67..6847aea2 100644 --- a/db/index.js +++ b/db/index.js @@ -176,9 +176,38 @@ function getPreviousTemperature(cycleDay) { return winner.temperature.value } +const schema = db.schema.reduce((acc, curr) => { + acc[curr.name] = curr.properties + return acc +}, {}) + +function tryToCreateCycleDay(day, i) { + try { + db.create('CycleDay', day) + } catch (err) { + const msg = `Line ${i + 1}(${day.date}): ${err.message}` + throw new Error(msg) + } +} + +function tryToImportWithDelete(cycleDays) { + db.write(() => { + db.delete(db.objects('CycleDay')) + cycleDays.forEach(tryToCreateCycleDay) + }) +} + +function tryToImportWithoutDelete(cycleDays) { + db.write(() => { + cycleDays.forEach((day, i) => { + const existing = getCycleDay(day.date) + if (existing) db.delete(existing) + tryToCreateCycleDay(day, i) + }) + }) +} export { - db, saveSymptom, getOrCreateCycleDay, bleedingDaysSortedByDate, @@ -187,5 +216,8 @@ export { fillWithDummyData, deleteAll, getPreviousTemperature, - getCycleDay + getCycleDay, + schema, + tryToImportWithDelete, + tryToImportWithoutDelete } diff --git a/lib/import-export/get-csv-column-names.js b/lib/import-export/get-csv-column-names.js index f637593e..1b63943a 100644 --- a/lib/import-export/get-csv-column-names.js +++ b/lib/import-export/get-csv-column-names.js @@ -1,13 +1,13 @@ -import { db } from '../../db' +import { schema } from '../../db' export default function getColumnNamesForCsv() { return getPrefixedKeys('CycleDay') function getPrefixedKeys(schemaName, prefix) { - const schema = db.schema.find(x => x.name === schemaName).properties - return Object.keys(schema).reduce((acc, key) => { + const model = schema[schemaName] + return Object.keys(model).reduce((acc, key) => { const prefixedKey = prefix ? [prefix, key].join('.') : key - const childSchemaName = schema[key].objectType + const childSchemaName = model[key].objectType if (!childSchemaName) { acc.push(prefixedKey) return acc diff --git a/lib/import-export/import-from-csv.js b/lib/import-export/import-from-csv.js index 698586dc..77c24444 100644 --- a/lib/import-export/import-from-csv.js +++ b/lib/import-export/import-from-csv.js @@ -1,6 +1,6 @@ import csvParser from 'csvtojson' import isObject from 'isobject' -import { db, getCycleDay } from '../../db' +import { schema, tryToImportWithDelete, tryToImportWithoutDelete } from '../../db' import getColumnNamesForCsv from './get-csv-column-names' export default async function importCsv(csv, deleteFirst) { @@ -23,12 +23,11 @@ export default async function importCsv(csv, deleteFirst) { return Number(val) } - const cycleDayDbSchema = db.schema.find(x => x.name === 'CycleDay').properties const config = { ignoreEmpty: true, colParser: getColumnNamesForCsv().reduce((acc, colName) => { const path = colName.split('.') - const dbType = getDbType(cycleDayDbSchema, path) + const dbType = getDbType(schema.CycleDay, path) acc[colName] = item => { if (item === '') return null return parseFuncs[dbType](item) @@ -45,29 +44,9 @@ export default async function importCsv(csv, deleteFirst) { putNullForEmptySymptoms(cycleDays) if (deleteFirst) { - db.write(() => { - db.delete(db.objects('CycleDay')) - cycleDays.forEach(tryToCreateCycleDay) - }) + tryToImportWithDelete(cycleDays) } else { - db.write(() => { - cycleDays.forEach((day, i) => { - const existing = getCycleDay(day.date) - if (existing) { - db.delete(existing) - } - tryToCreateCycleDay(day, i) - }) - }) - } -} - -function tryToCreateCycleDay(day, i) { - try { - db.create('CycleDay', day) - } catch (err) { - const msg = `Line ${i + 1}(${day.date}): ${err.message}` - throw new Error(msg) + tryToImportWithoutDelete(cycleDays) } } @@ -99,6 +78,5 @@ function putNullForEmptySymptoms(data) { function getDbType(modelProperties, path) { if (path.length === 1) return modelProperties[path[0]].type const modelName = modelProperties[path[0]].objectType - const model = db.schema.find(x => x.name === modelName) - return getDbType(model.properties, path.slice(1)) + return getDbType(schema[modelName], path.slice(1)) } \ No newline at end of file -- GitLab