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);
|
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") {
|
async function loadFpp(session, group = "All") {
|
||||||
try {
|
try {
|
||||||
const payload = await apiPost("/Fpp/load/1/1", { token: session.token }, session.token);
|
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) {
|
async function renderRoute(req, res, url) {
|
||||||
const path = url.pathname;
|
const path = url.pathname;
|
||||||
const query = Object.fromEntries(url.searchParams.entries());
|
const query = Object.fromEntries(url.searchParams.entries());
|
||||||
@@ -1774,8 +1811,7 @@ async function renderRoute(req, res, url) {
|
|||||||
if (path.startsWith("/results/") && isGet) {
|
if (path.startsWith("/results/") && isGet) {
|
||||||
if (!requireAuth(req, res)) return;
|
if (!requireAuth(req, res)) return;
|
||||||
const resultId = path.split("/")[2];
|
const resultId = path.split("/")[2];
|
||||||
const results = await loadResults(session, query.search || "");
|
const result = await loadResultDetail(session, resultId);
|
||||||
const result = results.find((item) => item.id === resultId) || mockResults.find((item) => item.id === resultId) || mockResults[0];
|
|
||||||
html(res, 200, resultDetailPage(result));
|
html(res, 200, resultDetailPage(result));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -1814,6 +1850,13 @@ async function renderRoute(req, res, url) {
|
|||||||
return;
|
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) {
|
if (path.startsWith("/api/") && isGet) {
|
||||||
json(res, 200, { ok: true });
|
json(res, 200, { ok: true });
|
||||||
return;
|
return;
|
||||||
|
|||||||
Reference in New Issue
Block a user