From fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 Mon Sep 17 00:00:00 2001 From: Adam Soltys Date: Mon, 26 Aug 2024 21:17:43 -0700 Subject: typescript --- routes/items.ts | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 routes/items.ts (limited to 'routes/items.ts') diff --git a/routes/items.ts b/routes/items.ts new file mode 100644 index 00000000..9b6314fa --- /dev/null +++ b/routes/items.ts @@ -0,0 +1,70 @@ +import { g, s, db } from "$lib/db"; +import { v4 } from "uuid"; +import { bail, fail } from "$lib/utils"; + +export default { + 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}`); + if (!item) fail("Item not found"); + res.send(item); + } catch (e) { + bail(res, e.message); + } + }, + + async create({ body: item, user: { id } }, res) { + try { + if (!item.id) { + item.id = v4(); + await db.lPush(`${id}:items`, item.id); + } + + 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); + } catch (e) { + bail(res, e.message); + } + }, + + async del({ body: { item }, user: { id } }, res) { + try { + let n = await db.lRem(`${id}:items`, 0, item.id); + if (n) db.del(`item:${item.id}`); + else fail("item not found"); + + res.send({}); + } catch (e) { + 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