summaryrefslogtreecommitdiff
path: root/examples/ssr/server/api.mjs
diff options
context:
space:
mode:
Diffstat (limited to 'examples/ssr/server/api.mjs')
-rw-r--r--examples/ssr/server/api.mjs52
1 files changed, 52 insertions, 0 deletions
diff --git a/examples/ssr/server/api.mjs b/examples/ssr/server/api.mjs
index 3d2656815..9bb0be72a 100644
--- a/examples/ssr/server/api.mjs
+++ b/examples/ssr/server/api.mjs
@@ -1,9 +1,14 @@
import fs from 'fs';
+import lightcookie from 'lightcookie';
+
const dbJSON = fs.readFileSync(new URL('./db.json', import.meta.url));
const db = JSON.parse(dbJSON);
const products = db.products;
const productMap = new Map(products.map((product) => [product.id, product]));
+// Normally this would be in a database.
+const userCartItems = new Map();
+
const routes = [
{
match: /\/api\/products\/([0-9])+/,
@@ -32,6 +37,53 @@ const routes = [
res.end(JSON.stringify(products));
},
},
+ {
+ match: /\/api\/cart/,
+ async handle(req, res) {
+ res.writeHead(200, {
+ 'Content-Type': 'application/json'
+ });
+ let cookie = req.headers.cookie;
+ let userId = cookie ? lightcookie.parse(cookie)['user-id'] : '1'; // default for testing
+ if(!userId || !userCartItems.has(userId)) {
+ res.end(JSON.stringify({ items: [] }));
+ return;
+ }
+ let items = userCartItems.get(userId);
+ let array = Array.from(items.values());
+ res.end(JSON.stringify({ items: array }));
+ }
+ },
+ {
+ match: /\/api\/add-to-cart/,
+ async handle(req, res) {
+ let body = '';
+ req.on('data', chunk => body += chunk);
+ return new Promise(resolve => {
+ req.on('end', () => {
+ let cookie = req.headers.cookie;
+ let userId = lightcookie.parse(cookie)['user-id'];
+ let msg = JSON.parse(body);
+
+ if(!userCartItems.has(userId)) {
+ userCartItems.set(userId, new Map());
+ }
+
+ let cart = userCartItems.get(userId);
+ if(cart.has(msg.id)) {
+ cart.get(msg.id).count++;
+ } else {
+ cart.set(msg.id, { id: msg.id, name: msg.name, count: 1 });
+ }
+
+ res.writeHead(200, {
+ 'Content-Type': 'application/json',
+ });
+ res.end(JSON.stringify({ ok: true }));
+ });
+ });
+ }
+ }
];
export async function apiHandler(req, res) {