aboutsummaryrefslogtreecommitdiffstats
path: root/routes/items.ts
diff options
context:
space:
mode:
authorAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
committerAdam Soltys <[email protected]>2024-08-26 21:17:43 -0700
commitfe62cadd6fb4a7e49f7d59401fc74ae0411e32a7 (patch)
treeaa8f34e1692bd2d638a2c996eeadb58671d07aea /routes/items.ts
parent00e43ddc0bf3d6dd719fc9295d156567fa2fecfb (diff)
downloadcoinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.tar.gz
coinos-server-fe62cadd6fb4a7e49f7d59401fc74ae0411e32a7.zip
typescript
Diffstat (limited to 'routes/items.ts')
-rw-r--r--routes/items.ts70
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);
+ }
+ },
+};