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
+2 -2
View File
@@ -1,6 +1,6 @@
# SportPath mobile
تطبيق Flutter عربي لحفظ جلسات المشي والجري محليًا، تسجيل الدخول برقم الهاتف، ومزامنة التمارين إلى PHP API. يحتوي المشروع الآن منصتي iOS وAndroid؛ `android/` يستخدم معرّف تطوير مؤقتًا `com.example.fitness_tracker` ويجب استبداله بمعرّف الحزمة الذي سيعتمده مالك المنتج قبل النشر على المتاجر.
تطبيق Flutter عربي لحفظ جلسات المشي والجري وسجل الوجبات محليًا، تسجيل الدخول برقم الهاتف، ومزامنة بيانات المستخدم مع PHP API. سجل الطعام الحالي إدخال يدوي قابل للتصحيح، وليس تحليلًا بصريًا بالذكاء الاصطناعي. يحتوي المشروع الآن منصتي iOS وAndroid؛ `android/` يستخدم معرّف تطوير مؤقتًا `com.example.fitness_tracker` ويجب استبداله بمعرّف الحزمة الذي سيعتمده مالك المنتج قبل النشر على المتاجر.
## عنوان خادم API
@@ -11,6 +11,6 @@ flutter build apk --dart-define=API_BASE_URL=https://fitness.example.com
flutter build ios --dart-define=API_BASE_URL=https://fitness.example.com
```
يستخدم التطبيق مسارات `API_BASE_URL/api/v1/auth/` للمصادقة و`API_BASE_URL/api/v1/workouts.php` لمزامنة سجل التمرين. لا تضع مفاتيح OTP أو JWT أو قواعد البيانات في `--dart-define`؛ هذه تبقى على الخادم. يلزم إعداد مزود OTP وتطبيق migrations على قاعدة staging قبل نجاح تسجيل الدخول.
يستخدم التطبيق مسارات `API_BASE_URL/api/v1/auth/` للمصادقة، و`workouts.php` للتمارين، و`meals.php` لسجل الطعام بين الأجهزة. تُحفظ وجبات الهاتف دون اتصال ثم تُرفع بمعرّف ثابت، ويُسحب آخر 30 يومًا عند فتح السجل. لا تضع مفاتيح OTP أو JWT أو قواعد البيانات في `--dart-define`؛ هذه تبقى على الخادم. يلزم إعداد مزود OTP وتطبيق migrations `001`–`005` بالترتيب على قاعدة قديمة، أو تجهيز القاعدة الجديدة من `backend/schema.sql` بدل تطبيق الترحيلات عليها.
جلسة التطبيق تحتفظ بـrefresh token في التخزين الآمن للنظام وتحدّث access token تلقائيًا عند استجابة 401. بيانات GPS والتمارين تبقى محليًا في SQLite/outbox إلى حين تسجيل الدخول والاتصال. لا تحذف التطبيق أو بياناته أثناء المزامنة إن كان لديك سجل غير متزامن.