More robust id handling in imports and rte delete.
This commit is contained in:
1 parent
5658cc0556
commit
db337892c4
4 files changed
+150
-43
No files matched your search
+39
-12
@@ -68,7 +68,14 @@ export const existsGpx = async (id: IdGpx) => {
|
||||
const prune = (
|
||||
id: any,
|
||||
object: any,
|
||||
previousGpx: Gpx | null,
|
||||
previousIds: {
|
||||
rte: number;
|
||||
wpt: number;
|
||||
trk: number;
|
||||
rtept: number;
|
||||
trkseg: number;
|
||||
trkpt: number;
|
||||
},
|
||||
extensions: any,
|
||||
docs: any[]
|
||||
) => {
|
||||
@@ -83,11 +90,6 @@ const prune = (
|
||||
key === 'trkpt'
|
||||
) {
|
||||
const subObjects = object[key];
|
||||
let previousId = 0;
|
||||
let nbPreviousObjects = 0;
|
||||
if (previousGpx !== null && key in previousGpx) {
|
||||
nbPreviousObjects = previousGpx[key].length;
|
||||
}
|
||||
for (const index in subObjects) {
|
||||
const subId = { ...id };
|
||||
if (key === 'trkpt') {
|
||||
@@ -95,11 +97,13 @@ const prune = (
|
||||
const normalId = intToTrkptId(
|
||||
new Date(object[key][index].time).valueOf()
|
||||
);
|
||||
const id = normalId > previousId ? normalId : previousId + 1;
|
||||
const id =
|
||||
normalId > previousIds.trk ? normalId : previousIds.trk + 1;
|
||||
subId[key] = id;
|
||||
previousId = id;
|
||||
previousIds.trk = id;
|
||||
} else {
|
||||
subId[key] = index + nbPreviousObjects;
|
||||
previousIds[key] = previousIds[key] + 1;
|
||||
subId[key] = previousIds[key];
|
||||
}
|
||||
// console.log({
|
||||
// caller: 'prune',
|
||||
@@ -121,10 +125,10 @@ const prune = (
|
||||
type: key,
|
||||
doc: subObjects[index],
|
||||
});
|
||||
prune(subId, subObjects[index], previousGpx, {}, docs);
|
||||
prune(subId, subObjects[index], previousIds, {}, docs);
|
||||
}
|
||||
object[key] = undefined;
|
||||
} else prune(id, object[key], previousGpx, extensions, docs);
|
||||
} else prune(id, object[key], previousIds, extensions, docs);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -284,7 +288,30 @@ export const pruneAndSaveImportedGpx = async (params: any) => {
|
||||
gpxId,
|
||||
});
|
||||
}
|
||||
prune(gpxId, gpx, previousGpx, extensions, docs);
|
||||
let previousIds = {
|
||||
rte: -1,
|
||||
wpt: -1,
|
||||
trk: -1,
|
||||
rtept: -1,
|
||||
trkseg: -1,
|
||||
trkpt: -1,
|
||||
};
|
||||
if (!!previousGpx?.wpt) {
|
||||
const wptUri = previousGpx.wpt.at(-1);
|
||||
const wptId = getUri('wpt', wptUri);
|
||||
previousIds.wpt = wptId.wpt;
|
||||
}
|
||||
if (!!previousGpx?.rte) {
|
||||
const rteUri = previousGpx.rte.at(-1);
|
||||
const rteId = getUri('rte', rteUri);
|
||||
previousIds.rte = rteId.rte;
|
||||
}
|
||||
if (!!previousGpx?.trk) {
|
||||
const trkUri = previousGpx.trk.at(-1);
|
||||
const trkId = getUri('trk', trkUri);
|
||||
previousIds.trk = trkId.trk;
|
||||
}
|
||||
prune(gpxId, gpx, previousIds, extensions, docs);
|
||||
console.log({ caller: 'pruneAndSaveImportedGpx / pruned', docs });
|
||||
try {
|
||||
const result = await putAll(docs);
|
||||
|
||||
@@ -71,3 +71,17 @@ export const putRte = async (params: any) => {
|
||||
await put(id, 'rte', (doc) => rte, rte);
|
||||
return rte;
|
||||
};
|
||||
|
||||
export const deleteRte = async (params: any) => {
|
||||
const { id } = params;
|
||||
const docs = await getFamily(id, { include_docs: false });
|
||||
console.log({ caller: 'deleteRte' }, id, docs);
|
||||
const deletedDocs = docs.rows.reverse().map((doc: any) => ({
|
||||
_deleted: true,
|
||||
_id: doc.id,
|
||||
_rev: doc.value.rev,
|
||||
}));
|
||||
console.log({ caller: 'deleteRte' }, id, docs, deletedDocs);
|
||||
await db.bulkDocs(deletedDocs);
|
||||
return id;
|
||||
};
|
||||
Reference in new issue
Block a user