feat: private checklists for zjazd preparation

Per-user checklists with items that may link a course, reading, deadline,
material or own presentation deck. An item with a reading shares the
reading's read mark. Student API routes with token twins, MCP tools,
migrations, tests and README.
This commit is contained in:
Jakub Zych
2026-10-30 12:41:04 +01:00
parent 643f8cbf7c
commit d7cd5baedf
15 changed files with 1262 additions and 21 deletions

View File

@@ -156,6 +156,7 @@ func migrated(t *testing.T) (*backpack.App, []party.Plugin, *gorm.DB) {
var bmTables = []string{
"jz_bm_meetings", "jz_bm_courses", "jz_bm_class_sessions", "jz_bm_deadlines", "jz_bm_readings",
"jz_bm_reading_progress", "jz_bm_reading_ownership", "jz_bm_tags", "jz_bm_materials", "jz_bm_material_tag", "jz_bm_calendar_feeds",
"jz_bm_checklists", "jz_bm_checklist_items",
}
func TestMigrateUpAndRollback(t *testing.T) {
@@ -201,6 +202,8 @@ func TestSchemaConstraints(t *testing.T) {
`INSERT INTO jz_bm_class_sessions (course_id, starts_at, ends_at) VALUES (999, NOW(), NOW() + interval '1 hour')`,
`INSERT INTO jz_bm_deadlines (title, due_at, kind) VALUES ('X', NOW(), 'party')`,
`INSERT INTO jz_bm_materials (title, type) VALUES ('X', 'video')`,
`INSERT INTO jz_bm_checklists (user_id, title) VALUES (999, 'X')`,
`INSERT INTO jz_bm_checklist_items (checklist_id, title) VALUES (999, 'X')`,
} {
if err := exec(bad); err == nil {
t.Errorf("accepted: %s", bad)