make every grade's id its class number and sort grades by it everywhere

Grade ids were the order the books were imported in (ninth=1, eighth=5), so
gradeId: 5 meant eighth grade and the admin, the question filter and the API
all listed grades out of order. Grade.number (1-12) is now read from the title,
new grades take it as their id, and migration 0008 moves existing ids plus every
reference to them: Unit, the loose grade_id in accounts/ai_tutor/rag, and the
grade target inside campaign JSON. Unnumbered demo grades move above 100 and the
id sequence is raised past 12 so they never collide with a real grade.

The frontend needs no change: it always reads gradeId from the server.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 22:47:02 +03:30
parent d70737dddf
commit 0c6b08c9ff
13 changed files with 292 additions and 12 deletions

View File

@@ -41,10 +41,14 @@ export interface HomeResponse {
}
export interface Grade {
/** برابرِ شماره‌ی پایه: ۸ یعنی هشتم. */
id: number;
/** شماره‌ی پایه (۱ تا ۱۲)؛ برای پایه‌های نمونه null. */
number: number | null;
title: string;
icon: string;
color: string;
lessonCount: number;
}
export interface UserSummary {