Code restructuring for db updates.
This commit is contained in:
parent
2f362916da
commit
36a3199b36
|
@ -1,10 +1,5 @@
|
||||||
import { cloneDeep } from 'lodash';
|
|
||||||
import getUri from '../lib/ids';
|
import getUri from '../lib/ids';
|
||||||
|
import { put } from './lib';
|
||||||
declare global {
|
|
||||||
var db: any;
|
|
||||||
var dbReady: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
const emptyGpx: Gpx = {
|
const emptyGpx: Gpx = {
|
||||||
$: {
|
$: {
|
||||||
|
@ -38,7 +33,13 @@ const emptyGpx: Gpx = {
|
||||||
|
|
||||||
export const putNewGpx = (id: string) => {
|
export const putNewGpx = (id: string) => {
|
||||||
const uri = getUri('gpx', { gpx: id });
|
const uri = getUri('gpx', { gpx: id });
|
||||||
const gpx = cloneDeep(emptyGpx);
|
put(
|
||||||
|
uri,
|
||||||
|
'gpx',
|
||||||
|
(gpx) => {
|
||||||
gpx.metadata!.time = new Date(Date.now()).toISOString();
|
gpx.metadata!.time = new Date(Date.now()).toISOString();
|
||||||
db.put({ _id: uri, type: 'gpx', doc: gpx });
|
return gpx;
|
||||||
|
},
|
||||||
|
emptyGpx
|
||||||
|
);
|
||||||
};
|
};
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { cloneDeep } from 'lodash';
|
||||||
|
|
||||||
|
declare global {
|
||||||
|
var db: any;
|
||||||
|
}
|
||||||
|
|
||||||
|
export const put = async (
|
||||||
|
_id: string,
|
||||||
|
type: string,
|
||||||
|
update: (doc: any) => any,
|
||||||
|
defaultDoc: any
|
||||||
|
) => {
|
||||||
|
var current;
|
||||||
|
try {
|
||||||
|
current = await db.get(_id);
|
||||||
|
} catch {
|
||||||
|
current = { _rev: undefined, doc: cloneDeep(defaultDoc) };
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
db.put({ _id, _rev: current._rev, type, doc: update(current.doc) });
|
||||||
|
} catch (error: any) {
|
||||||
|
if (error.name === 'conflict') {
|
||||||
|
await put(_id, type, update, defaultDoc);
|
||||||
|
} else {
|
||||||
|
console.error(
|
||||||
|
`put(${_id}, ${JSON.stringify(
|
||||||
|
update(current.doc)
|
||||||
|
)}), error: ${JSON.stringify(error)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue