Add offline meal journal and secure sync

This commit is contained in:
Hamza-Ayed
2026-10-04 02:13:23 +03:00
parent d892e3d981
commit 27fc2d5eb1
12 changed files with 936 additions and 23 deletions
+4
View File
@@ -78,6 +78,10 @@ Git: مصدر الإصدار → SSH:2101 → نسخة إصدار → تبديل
أضيفت الآن صفحة `/admin/` عربية لإدارة الحركات والخطط، ودخول OTP للحساب الموجود مسبقًا. لا تسمح الواجهة بالمستخدم العادي؛ يتحقق الخادم من دور `owner` أو `content_manager` لكل طلب. واجهة `/api/v1/admin/content.php` تقرأ وتكتب التمارين والخطط والجلسات وبيانات الوسائط، وتقيّد روابط GIF إلى HTTPS، وتتحقق من القيم والحدود، كما تمنع سحب نشر تمرين مرتبط بخطة منشورة. تسجل تغييرات المحتوى في `training_content_audit` عبر migration `004_content_audit.sql`. هذه لوحة تحرير أولية: جدول جلسات الخطة يحرر حاليًا كـJSON، ولا تتضمن بعد محرر رفع ملفات أو مراجعة مصادر مدمجة. يجب تطبيق migrations بالترتيب `001` إلى `004` على staging بعد النسخ الاحتياطي، وإنشاء حساب مالك بدور صحيح خارج الواجهة؛ لم تُطبق بعد على قاعدة حية.
أضيف سجل وجبات عربي أولي في التطبيق: إدخال الاسم والنوع والوقت والسعرات والمغذيات التي يحددها المستخدم، تصحيح السجل، جمع يومي، تخزين SQLite دون اتصال، ثم رفع idempotent بمعرّف UUID إلى `/api/v1/meals.php` ضمن هوية المستخدم. الترحيل `005_meal_journal.sql` يضيف السجل الخاص بالمستخدم. القيم الموسومة حاليًا «تقدير» وليست مخرجات AI. لم يجر بعد اختيار مزود رؤية أو بناء مسار رفع صور آمن وتحليل قابل للمراجعة؛ لذلك لم نعرض زر تصوير وهميًا ولم نسمح للعميل بادعاء أن الوجبة حُللت آليًا. يجب تطبيق migrations `001` إلى `005` بالترتيب على staging بعد أخذ نسخة احتياطية؛ لم تُطبق على MySQL حية.
للتثبيت الجديد، `backend/schema.sql` يتضمن الآن جداول سجل الوجبات وتدقيق المحتوى. لا تشغّل migrations `001` إلى `005` فوق قاعدة أنشئت كاملًا من `schema.sql`؛ تلك للمخططات القائمة التي تحتاج ترقية، وتُختار بعد مقارنة version/schema والنسخة الاحتياطية.
قاعدة البيانات في CloudPanel تنشأ باسم ومستخدم مخصصين من واجهة الإدارة، بصلاحيات قاعدة التطبيق فقط، واتصال محلي إن كانت PHP وMySQL على المضيف نفسه. تحفظ نسخة احتياطية دورية وتختبر استعادتها. اسم قاعدة البيانات والمستخدم وكلمة المرور الفعلية تأتي من بيئة الخادم؛ لا تضاف إلى Flutter أو Git.
## إعداد Git وبيئة المشروع