From 99860c48bc27f17d8c593dcfbaab494092e5b19c Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Tue, 20 Feb 2024 23:18:25 -0800 Subject: sort item endpoint --- index.js | 1 + routes/items.js | 33 ++++++++++++++++++++++++++------- 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/index.js b/index.js index 8a5baff3..ab1d1a5e 100644 --- a/index.js +++ b/index.js @@ -104,6 +104,7 @@ app.get("/:id/items", items.list); app.get("/items/:id", items.get); app.post("/items", auth, items.create); app.post("/items/delete", auth, items.del); +app.post("/items/sort", auth, items.sort); app.get("/request/:id", auth, requests.get); app.get("/requests", auth, requests.list); diff --git a/routes/items.js b/routes/items.js index 4d831592..a7fa1567 100644 --- a/routes/items.js +++ b/routes/items.js @@ -3,16 +3,20 @@ import { v4 } from "uuid"; import { bail, fail } from "$lib/utils"; export default { - async list({ params: { id } }, res) { - let items = await db.lRange(`${id}:items`, 0, -1); - items = await Promise.all(items.map(async (id) => await g(`item:${id}`))); + async list({ params: { id: uid } }, res) { + let items = []; + for (let id of await db.lRange(`${uid}:items`, 0, -1)) { + let item = await g(`item:${id}`); + if (item) items.push(item); + else await db.lRem(`${uid}:items`, 0, id); + } + res.send(items); }, async get({ params: { id } }, res) { try { let item = await g(`item:${id}`); - console.log("ITEM", item); if (!item) fail("Item not found"); res.send(item); } catch (e) { @@ -26,15 +30,16 @@ export default { await db.lPush(`${id}:items`, item.id); } - await s(`item:${item.id}`, item); + if (!parseFloat(item.price)) fail("Invalid price"); + item.name = item.name.replace(/[^a-zA-Z0-9 ]/g, ""); + + await s(`item:${item.id}`, item); res.send(item); }, async del({ body: { item }, user: { id } }, res) { try { - console.log(id); - console.log(item.id); let n = await db.lRem(`${id}:items`, 0, item.id); if (n) db.del(`item:${item.id}`); else fail("item not found"); @@ -44,4 +49,18 @@ export default { bail(res, e.message); } }, + + async sort({ body: { items }, user: { id } }, res) { + try { + await db.del(`${id}:items`); + + for (let item of items) { + await db.rPush(`${id}:items`, item.id); + } + + res.send({}); + } catch (e) { + bail(res, e.message); + } + }, }; -- cgit v1.2.3