diff options
| author | Adam Soltys <[email protected]> | 2024-08-26 21:17:43 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-08-26 21:17:43 -0700 |
| commit | fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (patch) | |
| tree | aa8f34e1692bd2d638a2c996eeadb58671d07aea /routes/items.ts | |
| parent | 00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (diff) | |
| download | coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.tar.gz coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.zip | |
typescript
Diffstat (limited to 'routes/items.ts')
| -rw-r--r-- | routes/items.ts | 70 |
1 files changed, 70 insertions, 0 deletions
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); + } + }, +}; |
