|
Lines 210-291
const deleteSampleObjects = async allObjects => {
Link Here
|
| 210 |
allObjects = [allObjects]; |
210 |
allObjects = [allObjects]; |
| 211 |
} |
211 |
} |
| 212 |
|
212 |
|
|
|
213 |
const pluralMap = { |
| 214 |
hold: "holds", |
| 215 |
patron: "patrons", |
| 216 |
item: "items", |
| 217 |
biblio: "biblios", |
| 218 |
library: "libraries", |
| 219 |
item_type: "item_types", |
| 220 |
}; |
| 221 |
// Merge by type |
| 222 |
const mergedObjects = {}; |
| 223 |
for (const objects of allObjects) { |
| 224 |
for (const [type, value] of Object.entries(objects)) { |
| 225 |
let plural = pluralMap?.[type] || type; |
| 226 |
if (!mergedObjects[plural]) { |
| 227 |
mergedObjects[plural] = []; |
| 228 |
} |
| 229 |
|
| 230 |
if (Array.isArray(value)) { |
| 231 |
mergedObjects[plural].push(...value); |
| 232 |
} else { |
| 233 |
mergedObjects[plural].push(value); |
| 234 |
} |
| 235 |
} |
| 236 |
} |
| 237 |
|
| 213 |
const deletionOrder = [ |
238 |
const deletionOrder = [ |
| 214 |
"hold", |
239 |
"holds", |
| 215 |
"patron", |
240 |
"patrons", |
| 216 |
"item", |
|
|
| 217 |
"items", |
241 |
"items", |
| 218 |
"biblio", |
242 |
"biblios", |
| 219 |
"library", |
|
|
| 220 |
"libraries", |
243 |
"libraries", |
| 221 |
"item_type", |
244 |
"item_types", |
| 222 |
]; |
245 |
]; |
| 223 |
|
246 |
|
| 224 |
for (const type of deletionOrder) { |
247 |
for (const type of deletionOrder) { |
| 225 |
for (const objects of allObjects) { |
248 |
if (!mergedObjects[type] || mergedObjects[type].length === 0) { |
| 226 |
if (!objects.hasOwnProperty(type)) { |
249 |
continue; |
| 227 |
continue; |
250 |
} |
| 228 |
} |
251 |
|
| 229 |
if (Array.isArray(objects[type]) && objects[type].length == 0) { |
252 |
const objects = mergedObjects[type]; |
| 230 |
// Empty array |
253 |
let ids = []; |
| 231 |
continue; |
254 |
switch (type) { |
| 232 |
} |
255 |
case "biblios": |
| 233 |
switch (type) { |
256 |
ids = objects.map(i => i.biblio_id); |
| 234 |
case "biblio": |
257 |
await query({ |
| 235 |
await query({ |
258 |
sql: `DELETE FROM biblio WHERE biblionumber IN (${ids.map(() => "?").join(",")})`, |
| 236 |
sql: "DELETE FROM biblio WHERE biblionumber=?", |
259 |
values: ids, |
| 237 |
values: [objects[type].biblio_id], |
260 |
}); |
| 238 |
}); |
261 |
break; |
| 239 |
break; |
262 |
case "items": |
| 240 |
case "items": |
263 |
ids = objects.map(i => i.item_id); |
| 241 |
let item_ids = objects[type].map(i => i.item_id); |
264 |
await query({ |
| 242 |
await query({ |
265 |
sql: `DELETE FROM items WHERE itemnumber IN (${ids.map(() => "?").join(",")})`, |
| 243 |
sql: `DELETE FROM items WHERE itemnumber IN (${item_ids.map(() => "?").join(",")})`, |
266 |
values: ids, |
| 244 |
values: item_ids, |
267 |
}); |
| 245 |
}); |
268 |
break; |
| 246 |
break; |
269 |
case "libraries": |
| 247 |
case "item": |
270 |
ids = objects.map(i => i.library_id); |
| 248 |
await query({ |
271 |
await query({ |
| 249 |
sql: "DELETE FROM items WHERE itemnumber = ?", |
272 |
sql: `DELETE FROM branches WHERE branchcode IN (${ids.map(() => "?").join(",")})`, |
| 250 |
values: [objects[type].item_id], |
273 |
values: ids, |
| 251 |
}); |
274 |
}); |
| 252 |
break; |
275 |
break; |
| 253 |
case "library": |
276 |
case "holds": |
| 254 |
await query({ |
277 |
ids = objects.map(i => i.hold_id); |
| 255 |
sql: "DELETE FROM branches WHERE branchcode = ?", |
278 |
await query({ |
| 256 |
values: [objects[type].library_id], |
279 |
sql: `DELETE FROM reserves WHERE reserve_id IN (${ids.map(() => "?").join(",")})`, |
| 257 |
}); |
280 |
values: ids, |
| 258 |
break; |
281 |
}); |
| 259 |
case "libraries": |
282 |
break; |
| 260 |
let library_ids = objects[type].map(i => i.library_id); |
283 |
case "item_types": |
| 261 |
await query({ |
284 |
ids = objects.map(i => i.item_type_id); |
| 262 |
sql: `DELETE FROM branches WHERE branchcode IN (${library_ids.map(() => "?").join(",")})`, |
285 |
await query({ |
| 263 |
values: library_ids, |
286 |
sql: `DELETE FROM itemtypes WHERE itemtype IN (${ids.map(() => "?").join(",")})`, |
| 264 |
}); |
287 |
values: ids, |
| 265 |
break; |
288 |
}); |
| 266 |
case "hold": |
289 |
break; |
| 267 |
await query({ |
290 |
case "patrons": |
| 268 |
sql: "DELETE FROM reserves WHERE reserve_id = ?", |
291 |
ids = objects.map(i => i.patron_id); |
| 269 |
values: [objects[type].hold_id], |
292 |
await query({ |
| 270 |
}); |
293 |
sql: `DELETE FROM borrowers WHERE borrowernumber IN (${ids.map(() => "?").join(",")})`, |
| 271 |
break; |
294 |
values: ids, |
| 272 |
case "item_type": |
295 |
}); |
| 273 |
await query({ |
296 |
break; |
| 274 |
sql: "DELETE FROM itemtypes WHERE itemtype = ?", |
297 |
default: |
| 275 |
values: [objects[type].item_type_id], |
298 |
throw Error( |
| 276 |
}); |
299 |
`Not implemented yet: cannot deleted object '${type}'` |
| 277 |
break; |
300 |
); |
| 278 |
case "patron": |
|
|
| 279 |
await query({ |
| 280 |
sql: "DELETE FROM borrowers WHERE borrowernumber = ?", |
| 281 |
values: [objects[type].patron_id], |
| 282 |
}); |
| 283 |
break; |
| 284 |
default: |
| 285 |
console.log( |
| 286 |
`Not implemented yet: cannot deleted object '${type}'` |
| 287 |
); |
| 288 |
} |
| 289 |
} |
301 |
} |
| 290 |
} |
302 |
} |
| 291 |
return true; |
303 |
return true; |
|
Lines 420-426
const insertObject = async ({ type, object, baseUrl, authHeader }) => {
Link Here
|
| 420 |
authHeader, |
432 |
authHeader, |
| 421 |
}); |
433 |
}); |
| 422 |
} else { |
434 |
} else { |
| 423 |
return false; |
435 |
throw Error(`Unsupported object type '${type}' to insert`); |
| 424 |
} |
436 |
} |
| 425 |
|
437 |
|
| 426 |
return true; |
438 |
return true; |
| 427 |
- |
|
|