Add SportPath auth APIs and training content foundation
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
|
||||
تاريخ التحديث: 4 أكتوبر 2026
|
||||
|
||||
هذه الوثيقة تتمّم [خطة المنتج والبحث](FITNESS_PRODUCT_PLAN_AR.md)، وتحوّل طلب تسجيل الدخول والهاتف والسيرفر والنشر إلى تصميم تنفيذي. لا يوجد مستودع Git أو نطاق أو بيانات CloudPanel مهيأة بعد، لذلك سكربت النشر يجهّز طريقة العمل ولا يتصل بسيرفر الآن.
|
||||
هذه الوثيقة تتمّم [خطة المنتج والبحث](FITNESS_PRODUCT_PLAN_AR.md)، وتحوّل طلب تسجيل الدخول والهاتف والسيرفر والنشر إلى تصميم تنفيذي. مستودع Git موجود على `main` ومتصّل بـ`origin`، لكن النطاق وبيانات CloudPanel والاتصال الفعلي بالخادم لم تجهز بعد؛ لذلك سكربت النشر لا يتصل بسيرفر الآن.
|
||||
|
||||
## المنتج الذي سنكمله
|
||||
|
||||
@@ -74,13 +74,13 @@ Git: مصدر الإصدار → SSH:2101 → نسخة إصدار → تبديل
|
||||
|
||||
يفضل نطاق واحد ببنية `/` للموقع و`/api/v1/` للواجهات و`/admin/` للإدارة. ملفات رفع الصور خارج `public/` ولا يمكن طلبها بعنوان مباشر؛ الوصول عبر endpoint يتحقق من ملكية المستخدم. واجهة PHP العامة تبدأ من مجلد `public`، بينما إعدادات الخادم والمكتبات والنسخ والملفات الخاصة تبقى فوق document root.
|
||||
|
||||
المستودع الحالي يضع ملفات PHP مباشرة داخل `backend/` ولا يحوي بعد front controller أو إعداد تحميل environment مكتمل أو ملفات migration واضحة. قبل ربط CloudPanel نعيد تنظيم نقطة الدخول إلى `backend/public/`، نبني bootstrap/config من environment، ونحوّل تغييرات المخطط إلى migrations مرتبة. لا نضع `backend/schema.sql` وحده كترحيل تلقائي على قاعدة إنتاج.
|
||||
ملفات PHP الداخلية باقية داخل `backend/` خارج document root، وأضفنا `public/` كنقطة عرض للموقع وواجهات JSON أولية. يتضمن الموقع صفحة عربية RTL متجاوبة، ويقدم `/api/v1/health.php` فحصًا لا يكشف تفاصيل الاتصال، و`/api/v1/config.php` الإعدادات العامة فقط، و`/api/v1/plans.php` الخطط المنشورة وتمارينها ووسائط GIF والبدائل. أضيفت جداول مكتبة التمارين والخطط والجلسات ومهاجرة `003_training_content.sql`. فشل قاعدة البيانات يعاد كـ503 دون تسريب تفاصيلها. هذه واجهات تأسيسية؛ لا توجد بعد مصادقة مستخدم أو لوحة إدارة ولا ينبغي نشرها كمنتج مكتمل. لا نضع `backend/schema.sql` وحده كترحيل تلقائي على قاعدة إنتاج.
|
||||
|
||||
قاعدة البيانات في CloudPanel تنشأ باسم ومستخدم مخصصين من واجهة الإدارة، بصلاحيات قاعدة التطبيق فقط، واتصال محلي إن كانت PHP وMySQL على المضيف نفسه. تحفظ نسخة احتياطية دورية وتختبر استعادتها. اسم قاعدة البيانات والمستخدم وكلمة المرور الفعلية تأتي من بيئة الخادم؛ لا تضاف إلى Flutter أو Git.
|
||||
|
||||
## إعداد Git وبيئة المشروع
|
||||
|
||||
عندما ينشئ المستخدم repository:
|
||||
إعداد Git الحالي:
|
||||
|
||||
1. نفحص `.gitignore` قبل أول commit؛ نتأكد أن ملفات الأسرار وبيانات الهاتف وملفات قواعد البيانات والبناء غير متتبعة.
|
||||
2. ينشأ `.env.example` يحتوي أسماء الإعدادات وقيمًا فارغة/وهمية فقط. ملف `.env` الحقيقي لا يُنشأ بقيم حقيقية في المستودع.
|
||||
@@ -110,7 +110,11 @@ FOOD_AI_API_KEY=
|
||||
UPLOAD_PRIVATE_PATH=
|
||||
```
|
||||
|
||||
تم إنشاء repository محليًا على `main` ودفع المحتوى الحالي إلى `origin/main`. إعداد النشر لا يعمل على خادم بعد؛ لا توجد حاليًا بيانات host/site user أو مجلد public صالح.
|
||||
تم إنشاء repository محليًا على `main` ودفع المحتوى الحالي إلى `origin/main`. مجلد `public/` ونقطة دخوله أصبحا موجودين، لكن إعداد النشر لا يعمل على خادم بعد؛ لا توجد حاليًا بيانات host/site user أو نطاق أو قاعدة فعلية.
|
||||
|
||||
مخطط المحتوى يشمل GIF اختياريًا لكل تمرين مع صورة poster، تعليمات عربية، معدات/عضلات مستهدفة، مستوى صعوبة، بديل، وتنبيهات السلامة. الخطط ترتبط بجلسات يومية وتمارين موصوفة بالمجموعات/التكرارات أو المدة والراحة، مع حقول مراجع تحريرية. النشر يتم فقط للمحتوى المعتمد. لم تُدرج GIFs أو وصفات تدريب سريرية جاهزة في قاعدة البيانات بعد؛ يجب مراجعة المواد من مختص قبل نشرها ولا ينبغي تحويل خطة البداية المرئية في التطبيق إلى ادعاء توصية طبية شخصية.
|
||||
|
||||
أضيفت endpoints تأسيسية للمصادقة: `POST /api/v1/auth/request-otp.php`, `verify-otp.php`, `refresh.php`, و`logout.php`. يحفظ التحدي بصمة HMAC قصيرة العمر مع سقف محاولات وحدود إرسال، وتخزن refresh tokens كـSHA-256 hashes مع تدوير وكشف إعادة استخدام. Access tokens بصيغة JWT HS256 قصيرة العمر؛ الصلاحيات تعاد قراءتها من DB عند الطلب. توجد واجهة إدارة إعدادات لا يصل إليها إلا `owner` أو `content_manager` مع سجل تدقيق. محول الإرسال الحالي عقد JSON عام يتطلب `OTP_PROVIDER=generic_json` ولا يرسل إطلاقًا ما لم يُفعّل صراحة؛ ليس تكاملًا مع مزود المستخدم الفعلي بعد، ويجب مواءمة endpoint/header/body/الاستجابة مع توثيق مزوده قبل الإنتاج. لا يوجد بعد واجهة Flutter للدخول ولا ترحيل منفذ على خادم حي.
|
||||
|
||||
القيم أعلاه أسماء توضيحية. مزود الرسائل وموفر الذكاء الاصطناعي واسم النطاق والسياسات الرقمية لم تُحسم بعد، لذا تبقى حقولها فارغة ولا يُستخدم المثال كإعداد إنتاج.
|
||||
|
||||
@@ -132,8 +136,8 @@ UPLOAD_PRIVATE_PATH=
|
||||
|
||||
| المرحلة | النطاق | المعلم الذي يسمح بالانتقال |
|
||||
| --- | --- | --- |
|
||||
| 0. مستودع وقاعدة تشغيل | إنشاء Git، حماية الأسرار، توثيق البيئات، تحديد domain وOTP provider؛ إصلاح تهيئة الخدمات والحفظ والمزامنة | نسخ محلية مستقرة، commit أولي نظيف، وبنية staging قابلة للنشر |
|
||||
| 1. API وهوية | PHP bootstrap، migrations، MySQL، OTP provider adapter، JWT refresh sessions، تسجيل ومصادقة وصلاحيات | OTP sandbox ينجح، إعادة المحاولة آمنة، وحدود المعدل والإبطال موثقة |
|
||||
| 0. مستودع وقاعدة تشغيل | Git والحماية والوثائق ونقطة موقع أولية موجودة؛ يلزم تحديد domain وOTP provider وتهيئة CloudPanel ومراجعة migrations | إعداد staging قابل للنشر مع DB وTLS وhealth check |
|
||||
| 1. API وهوية ومحتوى | health/config/plans APIs تأسيسية ومخطط محتوى موجودان؛ يلزم migrations runner/versioning، OTP provider adapter، JWT refresh sessions، تسجيل ومصادقة وصلاحيات | OTP sandbox ينجح، إعادة المحاولة آمنة، حدود المعدل والإبطال موثقة، وخطط منشورة قابلة للإدارة |
|
||||
| 2. تجربة التمرين | أسئلة الإعداد، برنامج منشور، 30 GIF، جلسات offline، إشعارات محلية | مدرب يراجع الحركات، جلسة offline محفوظة مرة واحدة، وملخص أسبوعي صحيح |
|
||||
| 3. الغذاء والتقدم | تحليل صورة، تصحيح الحصة، وصفات محلية، قياسات وتقارير | اختبار وجبات موثق وتكلفة نموذجية مع تسجيل يدوي بديل |
|
||||
| 4. الموقع والإدارة | تجربة ويب متجاوبة، لوحة تحرير ومراجعة، التحكم بالإعدادات العامة | الأدوار مفروضة من API والعمليات الإدارية مسجلة |
|
||||
|
||||
Reference in New Issue
Block a user