feat(geom9 ch3 wave2 + final): §12 «Герон» + Финал Главы 3
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
'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 }),
|
||||
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;
|
||||
})();
|
||||
Reference in New Issue
Block a user