المزامنة دون اتصال
الجوال يعمل دون اتصال أولاً. الخادم يبقى مصدر الحقيقة. العملاء يحتفظون بذاكرة SQLite/Drift محلية للقراءة وصندوق صادر للكتابة دون اتصال، ثم يتقاربون عبر السحب والدفع.
الأهداف
- الاستمرار في العمل خلال انقطاعات طويلة دون فقدان بيانات بصمت.
- اكتشاف التعارضات بإصدارات الصفوف وطوابع الخادم الزمنية.
- نشر الحذف الناعم كسجلات مقبرة.
- إبقاء المستندات المالية/المخزنية المُرحَّلة غير قابلة للتعديل — التصحيحات عبر تعديل أو إلغاء أو عكس أو تسوية.
نقاط النهاية
| الطريقة | المسار | الغرض |
|---|---|---|
GET | /v1/sync/manifest | قدرات مزامنة الكيانات |
GET | /v1/sync/pull?since=<cursor> | التغييرات المُصفّحة منذ المؤشر |
POST | /v1/sync/push | رفع الطفرات المحلية المخزّنة |
POST | /v1/sync/reset | إعادة بناء الذاكرة المحلية من الخادم |
توجد متغيرات بنطاق المنشأة تحت /v1/businesses/:business_id/sync/....
كيف يعمل
- كل مورد تجاري له
sync_versionيُرفع عند كل تحديث (بما في ذلك الحذف الناعم). - السحب يستخدم مؤشراً معتماً غير شفاف (JSON base64url على
(updated_at, id)). - الدفع يطبّق دفعة من الطفرات المحلية؛ تظهر التعارضات بشكل حتمي.
- مبيعات نقاط البيع تستخدم
client_sale_idغير متكرر لتكون إعادة المحاولات بعد إعادة الاتصال آمنة.
نصائح للمشغّل
- اترك عملية شريط مهام أمين الصندوق على Windows تعمل ليُفرغ المزامنة الخلفية صندوق الصادر.
- بعد إعادة ضبط الجهاز، نفّذ سحب المزامنة قبل قبول المدفوعات.
- لا «تُحرّر» فاتورة مُرحَّلة في مكانها — استخدم إشعارات الدائن / العكس / التسوية.
ذات صلة
- نقاط البيع وأمين الصندوق
- النسخ الاحتياطي
- شرح مفصّل في المستودع:
docs/sync.md