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:
@@ -84,6 +84,13 @@ PaymentRequest را میزند، `Order.gateway_authority` را ذخیره م
|
||||
هنوز SQLite است (`OPTIONS.timeout=20` تا قفلهای همزمانیِ نوشتن را تحمل کند).
|
||||
مهاجرت به Postgres انجام نشده.
|
||||
|
||||
**idِ هر پایه همان شمارهی پایه است** (سوم=۳، هشتم=۸، دوازدهم=۱۲) و در فیلدِ
|
||||
`Grade.number` هم هست. پایهی تازه id را از شمارهاش میگیرد، نه از شمارندهی
|
||||
دیتابیس؛ شماره اگر خالی بماند از عنوان («پایه چهارم») خوانده میشود. پایهی
|
||||
بیشماره ([DEMO]/[SEED]) idِ بالای ۱۰۰ میگیرد. همهجا — API، ادمین، فیلترِ
|
||||
سوالها — پایهها بهترتیبِ شمارهاند. تا migrationِ `content.0008` id ترتیبِ
|
||||
واردشدنِ کتابها بود (نهم=۱، هشتم=۵).
|
||||
|
||||
⚠️ **`.iterator()` را دورِ حلقهای که مینویسد یا I/O بیرونی میزند نگذارید.**
|
||||
کرسرِ خواندن در تمامِ طولِ حلقه باز میماند و روی SQLite جدول را برای هر
|
||||
نویسندهی همزمان قفل میکند — قفلی که تا پایانِ حلقه رها نمیشود و هیچ
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
| گرفتنِ خروجیِ سوالها | چند سوال را انتخاب کنید → اکشنِ «دریافتِ فایل» |
|
||||
| وارد کردنِ **برنامهی درسی** | `/admin/content/grade/` → «وارد کردنِ برنامهی درسی از فایل» |
|
||||
| گرفتنِ خروجیِ برنامهی درسی | پایهها را انتخاب کنید → اکشنِ «دریافتِ فایلِ برنامهی درسی» |
|
||||
| افزودنِ یک **پایهی تازه** | `/admin/content/grade/add/` — عنوان به شکلِ «پایه چهارم»؛ شماره و id خودکار ۴ میشوند |
|
||||
|
||||
خروجیِ هر کدام **دقیقاً** همان قالبیست که ورودیاش میپذیرد، پس چرخهی
|
||||
«بگیر → ویرایش کن → برگردان» بسته است و برای دیدنِ یک نمونه لازم نیست کسی
|
||||
|
||||
@@ -76,9 +76,11 @@ curl -X POST https://api.math.tadrisino2.ir/api/auth/session \
|
||||
میشود، پس رویش چیزی که مالِ خودتان باشد نگذارید. برای کارِ روزمره یک
|
||||
`deviceId` مخصوصِ خودتان بسازید — هر رشتهای قبول است.
|
||||
|
||||
**۲. فهرستِ پایهها تا ششم است.** `GRADES` در `App.tsx` هاردکدِ ۱ تا ۶ است، ولی
|
||||
جهتِ محصول از ششم به بالا رفته (ترانزیشنی: ۶، ۷، ۹، ۱۰). از `api.grades()`
|
||||
بخوانید تا هر پایهای که اضافه شد خودبهخود بیاید.
|
||||
**۲. فهرستِ پایهها از `api.grades()` میآید** (انجام شده). ترتیب همان ترتیبِ
|
||||
کلاسهاست و `id` هر پایه برابرِ شمارهاش است: `gradeId: 8` یعنی پایهی هشتم.
|
||||
فیلدِ `number` هم همین عدد را صریح میدهد. پیش از ۲۰۲۶-۰۹-۲۳ idها ترتیبِ
|
||||
واردشدنِ کتابها بودند (هشتم=۵)؛ اپ چون همیشه `gradeId` را از سرور میگیرد،
|
||||
تغییری لازم نداشت.
|
||||
|
||||
**۳. صفحهی درس، ویدیو دارد.** `LessonScreen` فهرستی از
|
||||
`{type: "video" | "quiz"}` نشان میدهد. بکاند هنوز مفهومِ ویدیو ندارد —
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user