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
+34 -2
View File
@@ -176,9 +176,38 @@ function getPreviousTemperature(cycleDay) {
return winner.temperature.value 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 { export {
db,
saveSymptom, saveSymptom,
getOrCreateCycleDay, getOrCreateCycleDay,
bleedingDaysSortedByDate, bleedingDaysSortedByDate,
@@ -187,5 +216,8 @@ export {
fillWithDummyData, fillWithDummyData,
deleteAll, deleteAll,
getPreviousTemperature, getPreviousTemperature,
getCycleDay getCycleDay,
schema,
tryToImportWithDelete,
tryToImportWithoutDelete
} }
+4 -4
View File
@@ -1,13 +1,13 @@
import { db } from '../../db' import { schema } from '../../db'
export default function getColumnNamesForCsv() { export default function getColumnNamesForCsv() {
return getPrefixedKeys('CycleDay') return getPrefixedKeys('CycleDay')
function getPrefixedKeys(schemaName, prefix) { function getPrefixedKeys(schemaName, prefix) {
const schema = db.schema.find(x => x.name === schemaName).properties const model = schema[schemaName]
return Object.keys(schema).reduce((acc, key) => { return Object.keys(model).reduce((acc, key) => {
const prefixedKey = prefix ? [prefix, key].join('.') : key const prefixedKey = prefix ? [prefix, key].join('.') : key
const childSchemaName = schema[key].objectType const childSchemaName = model[key].objectType
if (!childSchemaName) { if (!childSchemaName) {
acc.push(prefixedKey) acc.push(prefixedKey)
return acc return acc
+5 -27
View File
@@ -1,6 +1,6 @@
import csvParser from 'csvtojson' import csvParser from 'csvtojson'
import isObject from 'isobject' import isObject from 'isobject'
import { db, getCycleDay } from '../../db' import { schema, tryToImportWithDelete, tryToImportWithoutDelete } from '../../db'
import getColumnNamesForCsv from './get-csv-column-names' import getColumnNamesForCsv from './get-csv-column-names'
export default async function importCsv(csv, deleteFirst) { export default async function importCsv(csv, deleteFirst) {
@@ -23,12 +23,11 @@ export default async function importCsv(csv, deleteFirst) {
return Number(val) return Number(val)
} }
const cycleDayDbSchema = db.schema.find(x => x.name === 'CycleDay').properties
const config = { const config = {
ignoreEmpty: true, ignoreEmpty: true,
colParser: getColumnNamesForCsv().reduce((acc, colName) => { colParser: getColumnNamesForCsv().reduce((acc, colName) => {
const path = colName.split('.') const path = colName.split('.')
const dbType = getDbType(cycleDayDbSchema, path) const dbType = getDbType(schema.CycleDay, path)
acc[colName] = item => { acc[colName] = item => {
if (item === '') return null if (item === '') return null
return parseFuncs[dbType](item) return parseFuncs[dbType](item)
@@ -45,29 +44,9 @@ export default async function importCsv(csv, deleteFirst) {
putNullForEmptySymptoms(cycleDays) putNullForEmptySymptoms(cycleDays)
if (deleteFirst) { if (deleteFirst) {
db.write(() => { tryToImportWithDelete(cycleDays)
db.delete(db.objects('CycleDay'))
cycleDays.forEach(tryToCreateCycleDay)
})
} else { } else {
db.write(() => { tryToImportWithoutDelete(cycleDays)
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)
} }
} }
@@ -99,6 +78,5 @@ function putNullForEmptySymptoms(data) {
function getDbType(modelProperties, path) { function getDbType(modelProperties, path) {
if (path.length === 1) return modelProperties[path[0]].type if (path.length === 1) return modelProperties[path[0]].type
const modelName = modelProperties[path[0]].objectType const modelName = modelProperties[path[0]].objectType
const model = db.schema.find(x => x.name === modelName) return getDbType(schema[modelName], path.slice(1))
return getDbType(model.properties, path.slice(1))
} }