البنية
نظرة عامة على النظام
تطبيق iOS / عميل وكيل -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
تطبيق الويب -> app.<domain> -> CloudFront -> SPA
مصادقة المتصفح والوكيل -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
تحويل النطاق الجذر -> <domain> -> CloudFront redirect -> app.<domain>
المبادئ
- نطاقات عامة منفصلة لـ
appوapiوauth - Postgres هو مصدر الحقيقة
- عميل iOS يعمل دون اتصال أولًا مع SQLite محلي ومزامنة
- يشترك تطبيق الويب وعميل iOS وسطح الوكلاء الخارجيين في نموذج مساحة العمل نفسه
- يبدأ الوكلاء الخارجيون من
GET https://api.flashcards-open-source-app.com/v1/
العملاء المدعومون
- تطبيق ويب على
app.flashcards-open-source-app.com - تطبيق iOS في المستودع الرئيسي مع تخزين SQLite محلي
- تطبيق Android على Google Play
- عملاء وكلاء خارجيون عبر الاكتشاف وتهيئة OTP ومصادقة
Authorization: ApiKey
نموذج البيانات
workspacesworkspace_membersuser_settingsdevicescardsdecksreview_eventsapplied_operationssync_state
تدفق البيانات
الويب
- يسجّل المتصفح الدخول عبر
auth.<domain>. - يحمّل تطبيق الويب بيانات مساحة العمل من
api.<domain>. - تمر طلبات دردشة الذكاء الاصطناعي عبر
/chat/local-turn. - تحدّث عمليات إرسال المراجعة حالة المجدول عند الكتابة.
iOS
- يكتب تطبيق iOS إلى SQLite محليًا أولًا.
- توضع التغييرات المحلية في صندوق إرسال.
- ترفع المزامنة التغييرات عبر
/v1/workspaces/{workspaceId}/sync/push. - تنزّل المزامنة التحديثات البعيدة عبر
/v1/workspaces/{workspaceId}/sync/pull. - تطبّق قاعدة البيانات المحلية التغييرات وتقدّم مؤشر المزامنة.
الوكلاء الخارجيون
- يبدأ الوكلاء بـ
GET /v1/. - تعمل مرحلة OTP الأولى على
auth.<domain>. - يتلقى الوكيل مفتاح API طويل العمر.
- يحمّل الوكيل
/v1/agent/me، ويسرد مساحات العمل، ويختار واحدة إذا لزم الأمر، ثم يستخدم/v1/agent/sql.
الجدولة
يستخدم Flashcards خوارزمية FSRS كمجدول للمراجعة.
ملاحظات التنفيذ:
- تحتفظ الخلفية وiOS بتطبيقين متطابقين لـ FSRS
- يعكس تطبيق الويب عقد بيانات الجدولة، لكنه لا يشحن نسخة ثالثة من المجدول
- تتضمن إعدادات المجدول على مستوى مساحة العمل الاحتفاظ المرغوب وخطوات التعلم وخطوات إعادة التعلم والحد الأقصى للفاصل والزغب
- يأتي الطابع الزمني الحقيقي للمراجعة من
reviewedAtClient
للعقد التفصيلي، راجع منطق جدولة FSRS في المستودع الرئيسي.
المصادقة
- OTP عبر البريد باستخدام Cognito
- ملفات تعريف ارتباط جلسة مشتركة النطاق لتطبيق الويب المستضاف
- تهيئة OTP للوكلاء على
auth.<domain>مع إخراج ApiKey طويل العمر AUTH_MODE=noneللتطوير المحليAUTH_MODE=cognitoللمصادقة الشبيهة بالإنتاج
شكل النشر
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + Lambda backendauth.<domain>-> API Gateway + Lambda auth service- Postgres في AWS RDS
يمكن أن يبقى النطاق الجذر على موقع تسويقي منفصل. وإذا كان غير مستخدم أثناء مرحلة التمهيد، يمكن للبنية التحتية تحويله مؤقتًا إلى app.<domain>.