feat: implement 52-week annual curriculum system with admin management and automated topic progression
This commit is contained in:
@@ -244,3 +244,67 @@ export async function setSetting(key, value) {
|
||||
return pb.collection('settings').create({ key, value: String(value) });
|
||||
}
|
||||
}
|
||||
|
||||
// ── Curriculum ────────────────────────────────────────────────────────────────
|
||||
|
||||
export async function getCurriculum(year) {
|
||||
try {
|
||||
return await pb.collection('curriculum').getFullList({
|
||||
filter: `year=${year}`,
|
||||
sort: 'week_number',
|
||||
});
|
||||
} catch { return []; }
|
||||
}
|
||||
|
||||
export async function getCurriculumWeek(year, weekNumber) {
|
||||
try {
|
||||
return await pb.collection('curriculum').getFirstListItem(
|
||||
`year=${year} && week_number=${weekNumber}`
|
||||
);
|
||||
} catch { return null; }
|
||||
}
|
||||
|
||||
export async function setCurriculumWeek(year, weekNumber, data) {
|
||||
try {
|
||||
const r = await pb.collection('curriculum').getFirstListItem(
|
||||
`year=${year} && week_number=${weekNumber}`
|
||||
);
|
||||
return pb.collection('curriculum').update(r.id, data);
|
||||
} catch {
|
||||
return pb.collection('curriculum').create({
|
||||
year,
|
||||
week_number: weekNumber,
|
||||
...data,
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export async function deleteCurriculumWeek(year, weekNumber) {
|
||||
try {
|
||||
const r = await pb.collection('curriculum').getFirstListItem(
|
||||
`year=${year} && week_number=${weekNumber}`
|
||||
);
|
||||
return pb.collection('curriculum').delete(r.id);
|
||||
} catch { /* nothing to delete */ }
|
||||
}
|
||||
|
||||
export async function bulkSetCurriculum(year, weeks) {
|
||||
// Delete all existing entries for this year first
|
||||
const existing = await getCurriculum(year);
|
||||
await Promise.all(
|
||||
existing.map(r => pb.collection('curriculum').delete(r.id, { requestKey: null }))
|
||||
);
|
||||
// Create all new entries
|
||||
return Promise.all(
|
||||
weeks.map(w => pb.collection('curriculum').create({
|
||||
year,
|
||||
week_number: w.week_number,
|
||||
topic_id: w.topic_id || '',
|
||||
theme: w.theme || '',
|
||||
quarter: w.quarter || Math.ceil(w.week_number / 13),
|
||||
is_review_week: w.is_review_week || false,
|
||||
sort_order: w.sort_order ?? w.week_number,
|
||||
}, { requestKey: null }))
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user