محرك قاعدة البيانات والمزامنة دون اتصال
لدعم التوعية والخدمات الريفية في المباني ذات الاتصال الضعيف بالإنترنت، تنفذ Kononia قائمة انتظار كاملة لقاعدة البيانات دون اتصال بالإنترنت باستخدام واجهة برمجة تطبيقات IndexedDB الأصلية للمتصفح.
1. بنية قائمة الانتظار (offlineDb.ts)
عند فقدان الاتصال بالشبكة، يتم اعتراض عمليات كتابة قاعدة البيانات وتخزينها مؤقتًا محليًا في قاعدة بيانات IndexedDB تسمى KononiaOfflineDB.
تغطية الطاولة
تقوم قوائم انتظار قاعدة البيانات غير المتصلة بكتابة الحمولات لأربعة جداول أساسية:
سجلات_الحضورحالات_رعويةمتابعات_رعويةنموذج_التقديمات
مخطط تسجيل قائمة الانتظار
يحتوي كل سجل مخبأ على بيانات تعريف على مستوى النظام لتتبع محاولات المزامنة:
| المجال | اكتب | الوصف |
|---|---|---|
_المعرف المحلي | سلسلة (UUID) | المعرف الفريد الذي أنشأه العميل يعمل كمفتاح أساسي مؤقت. |
_جدول | سلسلة (التعداد) | جدول قاعدة بيانات الوجهة حيث ستتم مزامنة السجل. |
_حالة المزامنة | سلسلة (التعداد) | حالة المزامنة (معلقة، المزامنة، أو فشل). |
_تم الإنشاء | سلسلة (الطابع الزمني ISO) | التاريخ والوقت الذي تم فيه حفظ السجل في البداية دون اتصال. |
_رسالة خطأ | سلسلة (اختياري) | رسالة خطأ تفصيلية من آخر محاولة مزامنة فاشلة، إن وجدت. |
_إعادة المحاولة | الرقم | عداد تتبع عدد محاولات المزامنة التي تم إجراؤها. |
الحمولة | كائن (JSON) | حمولة البيانات الفعلية (الحقول والقيم) المراد إدراجها في قاعدة البيانات. |
2. دورة حياة المزامنة (syncManager.ts)
بمجرد استعادة الاتصال، يحاول العميل مسح قائمة الانتظار.
مشغلات المزامنة
- مستمع الأحداث عبر الإنترنت: يستمع التطبيق إلى الحدث الأصلي للمتصفح
window.addEventListener("online")لتشغيل عمليات المزامنة. - Background Sync API: إذا كان المتصفح مدعومًا، يقوم عامل الخدمة بتسجيل حدث
kononia-sync، مما يسمح بمزامنة التحديثات حتى إذا أغلق المستخدم التطبيق. - الإجراء اليدوي: يمكن للخدم النقر فوق زر المزامنة الآن في المكون
<SyncStatusBanner>الموجود أسفل الشاشة.
تدفق المعاملات
- قفل الحالة: يحدد المدير السجلات المعلقة ويضع علامة عليها
_syncStatus = "syncing"لمنع الإرسال المزدوج المتزامن. يتم زيادة عدد مرات إعادة المحاولة بمقدار 1. - إدراج قاعدة البيانات: يحاول العميل إدراج الحمولة في قاعدة بيانات Supabase.
- تنظيف قائمة الانتظار:
- النجاح: تم حذف السجل المؤقت من IndexedDB.
- فشل: تعود حالة السجل إلى “فشل” ويتم حفظ وصف الخطأ في
_errorMessage.
- سياسة الحد الأقصى لعمليات إعادة المحاولة: إذا فشلت مزامنة السجل 5 مرات، فسيتم وضع علامة خطأ دائم عليه (“فشل”
مع”تم تجاوز الحد الأقصى لعدد مرات إعادة المحاولة”`). يتوقف النظام عن إعادة المحاولة تلقائيًا لمنع تعطل واجهة برمجة التطبيقات (API)، مع الاحتفاظ بالسجل مخزنًا محليًا حتى يتمكن المستخدم من فحصه أو تنزيله.