From 9a9d4df7cee16b70f5a9ddddd30283c054b365f1 Mon Sep 17 00:00:00 2001 From: "sas.fajri" Date: Mon, 13 Apr 2026 14:55:46 +0700 Subject: [PATCH] Add result detail API adapter --- server.js | 47 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index 83a446e..f6b140c 100644 --- a/server.js +++ b/server.js @@ -1266,6 +1266,34 @@ async function loadResults(session, search = "") { return filterResults(term); } +async function loadResultDetail(session, resultId) { + const fallback = mockResults.find((item) => item.id === resultId) || mockResults[0]; + try { + // Inferred from project-specs note about an additional result base path. + const payload = await apiPost( + "/result/getResult", + { + token: session.token, + result_id: resultId, + order_id: resultId, + }, + session.token, + ); + const rows = extractArray(payload); + if (rows?.length) return normalizeResult(rows[0], 0); + if (payload && typeof payload === "object") { + return { + ...fallback, + ...normalizeResult(payload, 0), + id: resultId || fallback.id, + }; + } + } catch { + // Fall through to local seed data when the upstream result API is unavailable. + } + return fallback; +} + async function loadFpp(session, group = "All") { try { const payload = await apiPost("/Fpp/load/1/1", { token: session.token }, session.token); @@ -1553,6 +1581,15 @@ function fragmentPesanKhusus(orderId) { `; } +async function fragmentResultDetail(session, resultId) { + const result = await loadResultDetail(session, resultId); + return ` +
+ ${renderResultDetail(result)} +
+ `; +} + async function renderRoute(req, res, url) { const path = url.pathname; const query = Object.fromEntries(url.searchParams.entries()); @@ -1774,8 +1811,7 @@ async function renderRoute(req, res, url) { if (path.startsWith("/results/") && isGet) { if (!requireAuth(req, res)) return; const resultId = path.split("/")[2]; - const results = await loadResults(session, query.search || ""); - const result = results.find((item) => item.id === resultId) || mockResults.find((item) => item.id === resultId) || mockResults[0]; + const result = await loadResultDetail(session, resultId); html(res, 200, resultDetailPage(result)); return; } @@ -1814,6 +1850,13 @@ async function renderRoute(req, res, url) { return; } + if (path.startsWith("/fragments/results/detail/") && isGet) { + if (!requireAuth(req, res)) return; + const resultId = path.split("/")[4] || mockResults[0].id; + html(res, 200, await fragmentResultDetail(session, resultId)); + return; + } + if (path.startsWith("/api/") && isGet) { json(res, 200, { ok: true }); return;