From 857652404b76138ac168ec41058a09662a4abf62 Mon Sep 17 00:00:00 2001 From: Hamza-Ayed Date: Fri, 17 Jul 2026 02:31:04 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D8=AA=D8=AB=D8=A8=D9=8A=D8=AA=20=D9=86?= =?UTF-8?q?=D8=AA=D9=8A=D8=AC=D8=A9=20=D8=A7=D8=AE=D8=AA=D8=A8=D8=A7=D8=B1?= =?UTF-8?q?=20=D8=AA=D8=B2=D8=A7=D9=85=D9=86=20=D8=A7=D9=84=D9=85=D8=AD?= =?UTF-8?q?=D9=81=D8=B8=D8=A9=20=D8=B9=D9=84=D9=89=20=D8=A7=D9=84=D8=B3?= =?UTF-8?q?=D9=8A=D8=B1=D9=81=D8=B1=20(I1=20=D9=85=D9=8F=D8=AB=D8=A8=D9=8E?= =?UTF-8?q?=D8=AA)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 100 خصم متزامن → 50 نجاح / 50 رفض، 250→0، لا مال ضائع أو مخلوق. Co-Authored-By: Claude Opus 4.8 --- docs/17-backend-backlog.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/17-backend-backlog.md b/docs/17-backend-backlog.md index ea8807c..c07574b 100644 --- a/docs/17-backend-backlog.md +++ b/docs/17-backend-backlog.md @@ -144,7 +144,7 @@ | # | البند | التفصيل | |---|-------|---------| -| I1 | ✅ **إصلاح سباق المحفظة** | **منفَّذ**: `UPDATE … SET balance = balance ± :delta WHERE tenant_id … AND balance >= :amount RETURNING *` — عبارة واحدة ذرّية، والقيد+الرصيد في معاملة واحدة. أُضيف `wallet_txns.balance_after` وقيد `CHECK (balance >= 0)` كشبكة أمان. إنشاء المحفظة عبر `ON CONFLICT DO NOTHING`. اختبارات jest على pg-mem + `scripts/wallet-race-test.mjs` للتزامن الحقيقي على السيرفر. | +| I1 | ✅ **إصلاح سباق المحفظة** | **منفَّذ ومُثبَت على السيرفر** (commit 9d6b752): `UPDATE … SET balance = balance ± :delta WHERE tenant_id … AND balance >= :amount RETURNING *` — عبارة واحدة ذرّية، والقيد+الرصيد في معاملة واحدة. أُضيف `wallet_txns.balance_after` وقيد `CHECK (balance >= 0)` كشبكة أمان. إنشاء المحفظة عبر `ON CONFLICT DO NOTHING`.
**نتيجة `wallet-race-test.mjs 100 5` على Postgres حقيقي:** 100 خصم متزامن → نجح 50 بالضبط، رُفض 50، الرصيد 250→0، المخصوم = 250 (لا مال ضائع ولا مخلوق)، الزمن 1492ms. ✅ | | I2 | **محفظة لكل طرف + محفظة المنصة** | راكب · سائق · المستأجر/المنصة (مكافئ `siroWallet`) — أساس العمولة (B6). | | I3 | **جدول لكل طريقة دفع** | شام كاش · كليك · إي كاش · بيموب · MTN · فوري … لكل واحدة جدولها + محوّل (adapter) موحّد. حالياً عندنا `tripz_pay_payments` عام. | | I4 | **OTP على الـpayout عبر نبيه** | إرسال كود + تحقّق قبل تنفيذ السحب (لا يوجد في سيرو). |