feat: implement splash and onboarding flows, update app assets, and add project design documentation

This commit is contained in:
Hamza-Ayed
2026-07-24 04:15:07 +03:00
parent 9f7bc31408
commit 213b459912
208 changed files with 23801 additions and 1066 deletions
+24
View File
@@ -20,6 +20,30 @@
| S6 | 🟠 | **لا OTP على السحب** — `phone_verification` موجود لكنه مربوط بالتسجيل/الدخول فقط. | OTP + تحقّق قبل التحويل. | ✅ OTP على السحب عبر المُوزِّع (I4). |
| S7 | 🟡 | **جدولان متداخلان لنفس المفهوم**: `payout_requests` و`driver_withdrawal_requests`. | توحيدهما في جدول واحد. | ✅ جدول `pay_payouts` واحد. |
### ✅ إعادة فحص سيرو — 2026-07-24 (بطلب المالك: «العيوب في المدفوعات عدّلناها»)
فُحص الكود مباشرة. **4 من 7 مُصلَحة فعلاً وبجودة جيدة، و3 ما زالت مفتوحة + عيب جديد.**
| # | الحالة اليوم في سيرو | الدليل |
|---|---|---|
| S1 IDOR | ✅ **مُصلَح** | `request_payout.php:9` → `$driverId = $decodedToken->sub`، والهاتف يُقرأ من `driver` بالـid لا من الطلب |
| S2 حجز الرصيد | ✅ **مُصلَح** | `beginTransaction` + `SELECT … FOR UPDATE` + حالة `payout_reserved` + `rollBack` |
| S3 رسم 3500 | ✅ **مُصلَح** | الرقم اختفى من مسار السحب كلياً |
| S6 OTP على السحب | ✅ **مُصلَح** | `request_payout.php:28,60–72` — OTP إلزامي ويُتحقق من `token_verification_driver` |
| **S4 معاملة في الإنهاء** | 🔴 **ما زال مفتوحاً** | `finalize_payout.php` فيه **صفر `beginTransaction`** مقابل ~6 كتابات متتابعة. الاستثناء يُرمى بلا تراجع → فشل في الخطوة 5 يترك محفظة السائق مخصومة و`siroWallet` بلا قيد عمولة |
| **S5 `varchar(10)`** | 🔴 **ما زال مفتوحاً** | `payment_server/WalletDB.sql:121` + `schema_primary.sql:1486` + `schema_ride.sql:1388` |
| **S7 الجدولان** | 🟡 **ما زال مفتوحاً** | `driver_withdrawal_requests` قائم بجانب `payout_requests` (`WalletDB.sql:132`) |
#### 🔴 S18 — عيب جديد اكتُشف أثناء الفحص (لم يكن في التدقيق الأصلي)
`finalize_payout.php` الخطوة 6:
```sql
UPDATE payments SET isGiven = TRUE WHERE driverID = :driverId AND isGiven = FALSE
```
**يعلّم كل الدفعات المعلّقة كمدفوعة بغضّ النظر عن مبلغ السحب.** التعليق في الكود يقرّ بذلك صراحة («معتبراً أن عملية السحب تغطيها»). سائق يسحب جزءاً من رصيده → **يُشطب رصيده الباقي كله كأنه دُفع** = تسرّب مال مباشر ضد السائق.
**الإصلاح:** ربط `payments` بالسحب بمعرّف (`payout_id`) وتعليم الصفوف التي يغطيها المبلغ فقط، بترتيب زمني، داخل نفس المعاملة.
> ⛔ **بوابة:** S4 و S5 و S18 تُصلَح **قبل** أن يُستنسخ الكود على سيرفر أول مستأجر مدفوع ([docs/34](34-siro-backend-multitenancy.md) §7). بعد الاستنساخ يصير الإصلاح هجرة على N سيرفراً بدل تعديل في مكان واحد.
## المصادقة وكلمة المرور (`auth/`)
| # | الخطورة | العيب | الإصلاح المقترح لسيرو | حالنا في Tripz |