Files

44 lines
2.6 KiB
JavaScript

'use strict';
/* ──────────────────────────────────────────────────────────────────
Exam Preparation Module — API wrappers
Thin LS.api wrappers under window.EP.api.*
────────────────────────────────────────────────────────────────── */
(function () {
const base = (examKey) => `/api/exam-prep/${encodeURIComponent(examKey)}`;
const api = {
/* Track registry / metadata */
listTracks: () => LS.api('/api/exam-prep/tracks'),
getInfo: (examKey) => LS.api(`${base(examKey)}/info`),
/* Future endpoints (F2-F10) — placeholders so calling code can be written
against the final shape. Wire them up as routes ship. */
listVariants: (examKey) => LS.api(`${base(examKey)}/variants`),
getVariant: (examKey, n) => LS.api(`${base(examKey)}/variants/${n}/tasks`),
listTopics: (examKey) => LS.api(`${base(examKey)}/topics`),
getTopicTasks:(examKey, slug, query) => LS.api(`${base(examKey)}/topics/${encodeURIComponent(slug)}/tasks${qs(query)}`),
getPracticeNext: (examKey, query) => LS.api(`${base(examKey)}/practice/next${qs(query)}`),
getDashboard: (examKey) => LS.api(`${base(examKey)}/dashboard`),
getPlan: (examKey) => LS.api(`${base(examKey)}/plan`),
savePlan: (examKey, body) => LS.api(`${base(examKey)}/plan`, { method: 'PUT', body }),
deletePlan: (examKey) => LS.api(`${base(examKey)}/plan`, { method: 'DELETE' }),
saveAttempt: (body) => LS.api(`/api/exam-prep/attempts`, { method: 'POST', body }),
startMock: (examKey, body) => LS.api(`${base(examKey)}/mock/start`, { method: 'POST', body }),
mockAnswer: (mockId, body) => LS.api(`/api/exam-prep/mock/${mockId}/answer`, { method: 'POST', body }),
mockFinish: (mockId) => LS.api(`/api/exam-prep/mock/${mockId}/finish`, { method: 'POST' }),
mockResult: (mockId) => LS.api(`/api/exam-prep/mock/${mockId}/result`),
};
function qs(obj) {
if (!obj || typeof obj !== 'object') return '';
const parts = Object.entries(obj)
.filter(([, v]) => v !== undefined && v !== null && v !== '')
.map(([k, v]) => `${encodeURIComponent(k)}=${encodeURIComponent(v)}`);
return parts.length ? `?${parts.join('&')}` : '';
}
window.EP = window.EP || {};
window.EP.api = api;
})();