Move db operations back to db module

This commit is contained in:
Julia Friesel
2018-08-09 11:48:28 +02:00
parent 53328f608b
commit b07a2c8a53
3 changed files with 43 additions and 33 deletions
+4 -4
View File
@@ -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
+5 -27
View File
@@ -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))
}