Merge branch 'add-migration' into 'master'
Run migrations if necessary See merge request bloodyhealth/drip!90
This commit is contained in:
+28
-13
@@ -11,13 +11,38 @@ import {
|
||||
longAndComplicatedCycleWithCervix,
|
||||
cycleWithTempAndNoCervixShift
|
||||
} from './fixtures'
|
||||
import dbSchema from './schema'
|
||||
import schemas from './schemas'
|
||||
|
||||
let db
|
||||
const realmConfig = {
|
||||
schema: dbSchema
|
||||
|
||||
export async function openDb ({ hash, persistConnection }) {
|
||||
const realmConfig = {}
|
||||
if (hash) {
|
||||
realmConfig.encryptionKey = hashToInt8Array(hash)
|
||||
}
|
||||
|
||||
// perform migrations if necessary, see https://realm.io/docs/javascript/2.8.0/#migrations
|
||||
let nextSchemaIndex = Realm.schemaVersion(Realm.defaultPath)
|
||||
while (nextSchemaIndex < schemas.length - 1) {
|
||||
const tempConfig = Object.assign(
|
||||
realmConfig,
|
||||
schemas[nextSchemaIndex++]
|
||||
)
|
||||
const migratedRealm = new Realm(tempConfig)
|
||||
migratedRealm.close()
|
||||
}
|
||||
|
||||
// open the Realm with the latest schema
|
||||
realmConfig.schema = schemas[schemas.length - 1]
|
||||
const connection = await Realm.open(Object.assign(
|
||||
realmConfig,
|
||||
schemas[schemas.length - 1]
|
||||
))
|
||||
|
||||
if (persistConnection) db = connection
|
||||
}
|
||||
|
||||
|
||||
export function getBleedingDaysSortedByDate() {
|
||||
return db.objects('CycleDay').filtered('bleeding != null').sorted('date', true)
|
||||
}
|
||||
@@ -160,16 +185,6 @@ export function requestHash(type, pw) {
|
||||
}))
|
||||
}
|
||||
|
||||
export async function openDb ({ hash, persistConnection }) {
|
||||
if (hash) {
|
||||
realmConfig.encryptionKey = hashToInt8Array(hash)
|
||||
}
|
||||
|
||||
const connection = await Realm.open(realmConfig)
|
||||
|
||||
if (persistConnection) db = connection
|
||||
}
|
||||
|
||||
export async function changeEncryptionAndRestartApp(hash) {
|
||||
let key
|
||||
if (hash) key = hashToInt8Array(hash)
|
||||
|
||||
@@ -67,8 +67,6 @@ const SexSchema = {
|
||||
patch: { type: 'bool', optional: true },
|
||||
ring: { type: 'bool', optional: true },
|
||||
implant: { type: 'bool', optional: true },
|
||||
diaphragm: { type: 'bool', optional: true },
|
||||
none: { type: 'bool', optional: true },
|
||||
other: { type: 'bool', optional: true },
|
||||
note: { type: 'string', optional: true }
|
||||
}
|
||||
@@ -129,14 +127,17 @@ const CycleDaySchema = {
|
||||
}
|
||||
}
|
||||
|
||||
export default [
|
||||
CycleDaySchema,
|
||||
TemperatureSchema,
|
||||
BleedingSchema,
|
||||
MucusSchema,
|
||||
CervixSchema,
|
||||
NoteSchema,
|
||||
DesireSchema,
|
||||
SexSchema,
|
||||
PainSchema
|
||||
]
|
||||
export default {
|
||||
schema: [
|
||||
CycleDaySchema,
|
||||
TemperatureSchema,
|
||||
BleedingSchema,
|
||||
MucusSchema,
|
||||
CervixSchema,
|
||||
NoteSchema,
|
||||
DesireSchema,
|
||||
SexSchema,
|
||||
PainSchema
|
||||
],
|
||||
schemaVersion: 0
|
||||
}
|
||||
+156
@@ -0,0 +1,156 @@
|
||||
const TemperatureSchema = {
|
||||
name: 'Temperature',
|
||||
properties: {
|
||||
value: 'double',
|
||||
exclude: 'bool',
|
||||
time: {
|
||||
type: 'string',
|
||||
optional: true
|
||||
},
|
||||
note: {
|
||||
type: 'string',
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const BleedingSchema = {
|
||||
name: 'Bleeding',
|
||||
properties: {
|
||||
value: 'int',
|
||||
exclude: 'bool'
|
||||
}
|
||||
}
|
||||
|
||||
const MucusSchema = {
|
||||
name: 'Mucus',
|
||||
properties: {
|
||||
feeling: 'int',
|
||||
texture: 'int',
|
||||
value: 'int',
|
||||
exclude: 'bool'
|
||||
}
|
||||
}
|
||||
|
||||
const CervixSchema = {
|
||||
name: 'Cervix',
|
||||
properties: {
|
||||
opening: 'int',
|
||||
firmness: 'int',
|
||||
position: {type: 'int', optional: true },
|
||||
exclude: 'bool'
|
||||
}
|
||||
}
|
||||
|
||||
const NoteSchema = {
|
||||
name: 'Note',
|
||||
properties: {
|
||||
value: 'string'
|
||||
}
|
||||
}
|
||||
|
||||
const DesireSchema = {
|
||||
name: 'Desire',
|
||||
properties: {
|
||||
value: 'int'
|
||||
}
|
||||
}
|
||||
|
||||
const SexSchema = {
|
||||
name: 'Sex',
|
||||
properties: {
|
||||
solo: { type: 'bool', optional: true },
|
||||
partner: { type: 'bool', optional: true },
|
||||
condom: { type: 'bool', optional: true },
|
||||
pill: { type: 'bool', optional: true },
|
||||
iud: { type: 'bool', optional: true },
|
||||
patch: { type: 'bool', optional: true },
|
||||
ring: { type: 'bool', optional: true },
|
||||
implant: { type: 'bool', optional: true },
|
||||
diaphragm: { type: 'bool', optional: true },
|
||||
none: { type: 'bool', optional: true },
|
||||
other: { type: 'bool', optional: true },
|
||||
note: { type: 'string', optional: true }
|
||||
}
|
||||
}
|
||||
|
||||
const PainSchema = {
|
||||
name: 'Pain',
|
||||
properties: {
|
||||
cramps: { type: 'bool', optional: true },
|
||||
ovulationPain: { type: 'bool', optional: true },
|
||||
headache: { type: 'bool', optional: true },
|
||||
backache: { type: 'bool', optional: true },
|
||||
nausea: { type: 'bool', optional: true },
|
||||
tenderBreasts: { type: 'bool', optional: true },
|
||||
migraine: { type: 'bool', optional: true },
|
||||
other: { type: 'bool', optional: true },
|
||||
note: { type: 'string', optional: true }
|
||||
}
|
||||
}
|
||||
|
||||
const CycleDaySchema = {
|
||||
name: 'CycleDay',
|
||||
primaryKey: 'date',
|
||||
properties: {
|
||||
date: 'string',
|
||||
temperature: {
|
||||
type: 'Temperature',
|
||||
optional: true
|
||||
},
|
||||
bleeding: {
|
||||
type: 'Bleeding',
|
||||
optional: true
|
||||
},
|
||||
mucus: {
|
||||
type: 'Mucus',
|
||||
optional: true
|
||||
},
|
||||
cervix: {
|
||||
type: 'Cervix',
|
||||
optional: true
|
||||
},
|
||||
note: {
|
||||
type: 'Note',
|
||||
optional: true
|
||||
},
|
||||
desire: {
|
||||
type: 'Desire',
|
||||
optional: true
|
||||
},
|
||||
sex: {
|
||||
type: 'Sex',
|
||||
optional: true
|
||||
},
|
||||
pain: {
|
||||
type: 'Pain',
|
||||
optional: true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default {
|
||||
schema: [
|
||||
CycleDaySchema,
|
||||
TemperatureSchema,
|
||||
BleedingSchema,
|
||||
MucusSchema,
|
||||
CervixSchema,
|
||||
NoteSchema,
|
||||
DesireSchema,
|
||||
SexSchema,
|
||||
PainSchema
|
||||
],
|
||||
schemaVersion: 1,
|
||||
migration: (oldRealm, newRealm) => {
|
||||
if (oldRealm.schemaVersion >= 1) return
|
||||
const oldCycleDays = oldRealm.objects('CycleDay')
|
||||
const newCycleDays = newRealm.objects('CycleDay')
|
||||
|
||||
oldCycleDays.forEach((day, i) => {
|
||||
if (!day.sex) return
|
||||
newCycleDays[i].sex.diaphragm = null
|
||||
newCycleDays[i].sex.none = null
|
||||
})
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
import schema0 from './0.js'
|
||||
import schema1 from './1.js'
|
||||
|
||||
export default [schema0, schema1]
|
||||
Reference in New Issue
Block a user