Add result detail API adapter
This commit is contained in:
47
server.js
47
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 `
|
||||
<div id="result-detail-fragment">
|
||||
${renderResultDetail(result)}
|
||||
</div>
|
||||
`;
|
||||
}
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user