3.9 KiB
حالة تنفيذ منصة صَقِل
آخر تحديث: 2026-09-02
هذه الوثيقة تفصل بين ما هو موجود في الكود وما هو جزء من الرؤية المستقبلية.
منفذ فعليًا
- تطبيق Flutter موحد للطالب وولي الأمر.
- تسجيل الدخول عبر OTP والرقم الوطني مع تخزين آمن للتوكن.
- شجرة مناهج ديناميكية من الخادم ومحتوى فعلي للصف العاشر.
- رفع الفيديو، تحويله إلى HLS عبر FFmpeg، ورفع حزمة HLS إلى Cloudflare R2.
- رفع الفيديو من Curriculum Studio أصبح غير متزامن: الطلب يحفظ الملف ويرجع فورًا، ثم يعالج
backend/scripts/video_upload_worker.phpالتحويل والرفع والربط بالدرس. - تشغيل الفيديو عبر HLS من R2 أو المسار المحلي عند عدم توفر R2.
- فحوص سقراطية مرتبطة بالدرس من قاعدة البيانات.
- بوابات Web للطالب والمعلم وولي الأمر واستوديو المناهج.
- API للامتحانات والمحاولات والتحليلات والمحادثة وتقييم المعلم.
منفذ جزئيًا
- تطبيق المعلم Flutter: shell ترحيبي فقط؛ الاستخدام الحالي للمعلم عبر Web Studio.
- امتحانات Flutter: واجهة أولية تحتاج ربطًا كاملًا بواجهات
/api/exams. - تنزيل موارد PDF: واجهة تحتاج ربطًا فعليًا بالملف.
- مؤشر الجاهزية: مصدره الخادم في التحليلات، ويحتاج استكمال عرضه وتحديثه في الشاشات.
- حماية الفيديو: HLS/R2 متوفران، أما DRM ومنع التسجيل فيحتاجان تكاملًا إنتاجيًا.
غير منفذ بعد
- تطبيق الإدارة Flutter.
- RAG كامل مع Embeddings ومصادر إجابة قابلة للتتبع.
- تنبيهات ولي الأمر الفورية داخل التطبيق.
- خوارزمية تكيفية إنتاجية متعددة المفاهيم.
المعمارية المعتمدة
- Backend: Native PHP 8.3+، PDO، Router داخلي، PHP-FPM/Nginx.
- Storage: Cloudflare R2 لحزمة HLS والملفات، مع تخزين محلي مؤقت أثناء التحويل.
- Apps:
student_appموحد للطالب وولي الأمر،teacher_appمستقل، وadmin_appمستقل. - لا يعتمد التشغيل على Laravel أو Docker.
خط سير الفيديو المعتمد
الربط المنطقي هو: curriculum_key للدرس ← lesson.video_uuid ← حزمة HLS في R2 على المسار hls/{course_id}/{video_uuid}/.
مجلدات R2 القديمة مثل hls/0 وhls/1 وhls/4 ليست فهرس الدروس؛ المرجع المعتمد هو قاعدة البيانات وcurriculum_key، لذلك لا تُحذف قبل ترحيلها والتحقق من كل درس.
بعد نشر الكود يجب أن يكون عامل PHP قادرًا على الكتابة إلى backend/storage/curriculum/processing وbackend/storage/videos وbackend/storage/hls، وأن يكون FFmpeg مثبتًا على الخادم. وللفيديوهات الكبيرة يجب ضبط upload_max_filesize وpost_max_size في PHP وclient_max_body_size في Nginx بما يتجاوز حجم أكبر فيديو.
إذا ظهر HTTP 413 Request Entity Too Large فهذا يعني أن Nginx رفض الملف قبل وصوله إلى PHP. في CloudPanel ارفع client_max_body_size إلى 512M أو أكثر، وارفع upload_max_filesize وpost_max_size في إعدادات PHP-FPM، ثم أعد تشغيل/Reload خدمة Nginx وPHP-FPM. لا تعالج 413 من كود التطبيق لأنه يحدث قبل تشغيل الـ API.