- GIN indexes on students/teachers (jsonb_path_ops) for fast user lookups
- Composite index on clazz (is_repeat, start_from, end_by) for date range queries
- Indexes on clazz_repeat (clazz_id, repeat_start, repeat_end) for joins
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ReqCourseGroup now includes a course_sections field populated with
full section objects when returned by find_course_group_by_ids,
fixing unpublished package detail display in the frontend.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
The daka query branching checked teacher_id first. When a student
has currentTeacherId set, both params are present, causing the
teacher branch to activate (requires scope) and fail with
"scope can not be none". Fixed by adding student_id.is_none()
to the teacher branch condition.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
List endpoint: batch-load daka_course_section, course_section,
course, and lianxi in single queries instead of per-daka loops.
Detail endpoint: single DB connection + batch relation lookup.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Allow students to filter dakas by teacher_id when querying.
Both student_id and teacher_id can now coexist in the request.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
CourseGroup has treat_none_as_null=true, so partial updates would set
unsent fields to NULL. Merge with existing record before update to
preserve org_id, created_by, course_section_ids, and teachers.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Migrations:
- htyws: add org_id, org_visible columns to course_group
- htykc: create course_package_item table
Backend:
- CourseGroup: add org_visible, org_id fields; find_org_visible_by_org_id query
- CoursePackageItem: new model with sync/list API
- SUPERVISOR role check for package item management
- New endpoint: GET /api/v1/ws/find_org_visible_course_groups
- New endpoints: POST /api/v1/clazz/course-package/item/sync,
GET /api/v1/clazz/course-package/item/list/{package_id}
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Downgrade list failures when loading ref resources for a section so one bad row does not fail the entire page; log warn with section id.
Made-with: Cursor
Require current_org_id for lianxi deletion and relation traversal, and add org-scoped relation lookups to prevent cross-organization hits in daka/jihua counters.
Made-with: Cursor
Add org_id fields and migrations for course, section, lianxi, piyue, and jihua/daka data paths, and enforce organization-scoped filtering in ws service queries.
Made-with: Cursor
Add org_id schema migrations and service-level filtering for teacher-student and class workflows, then cover org-context behavior with focused unit/e2e tests for leave and hour statistics.
Made-with: Cursor
Track required workspace crates, scripts, and historical diesel migrations so the repository contains the complete runnable backend baseline.
Made-with: Cursor
Add diesel migrations and synchronize backend/frontend model fields plus jsonb key migration to support generic teaching subjects beyond piano-specific naming.
Made-with: Cursor