معماری
نمای کلی سیستم
iOS app / agent client -> api.<domain> -> API Gateway -> Lambda backend -> Postgres
Web app -> app.<domain> -> CloudFront -> SPA
Browser and agent auth -> auth.<domain> -> API Gateway -> Auth Lambda -> Cognito
Apex fallback -> <domain> -> CloudFront redirect -> app.<domain>
اصول
- دامنههای عمومی جداگانه برای
app،apiوauth - Postgres منبع اصلی دادههاست
- کلاینت iOS آفلاینمحور است و از SQLite محلی بههمراه همگامسازی استفاده میکند
- برنامهٔ وب، برنامهٔ iOS و رابط عاملهای خارجی از یک مدل فضای کاری مشترک استفاده میکنند
- عاملهای خارجی از
GET https://api.nibomo.com/v1/شروع میکنند
کلاینتهای پشتیبانیشده
- برنامهٔ وب روی
app.nibomo.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 مینویسد.
- تغییرات محلی در یک صف خروجی (outbox) قرار میگیرند.
- همگامسازی تغییرات را از طریق
/v1/workspaces/{workspaceId}/sync/pushبارگذاری میکند. - همگامسازی بهروزرسانیهای راهدور را از طریق
/v1/workspaces/{workspaceId}/sync/pullدریافت میکند. - پایگاه دادهٔ محلی تغییرات را اعمال میکند و نشانگر همگامسازی را جلو میبرد.
عاملهای خارجی
- عاملها با
GET /v1/شروع میکنند. - آمادهسازی اولیه با OTP روی
auth.<domain>اجرا میشود. - عامل یک کلید API بلندمدت دریافت میکند.
- عامل
/v1/agent/meرا بارگذاری میکند، فضاهای کاری را فهرست میکند، در صورت نیاز یکی را انتخاب میکند و سپس از/v1/agent/sql/queryو/v1/agent/sql/executeاستفاده میکند.
زمانبندی
Nibomo از FSRS بهعنوان زمانبند مرور استفاده میکند.
نکتههای پیادهسازی:
- بکاند و iOS پیادهسازیهای قرینهٔ FSRS را نگه میدارند
- برنامهٔ وب قرارداد دادهٔ زمانبندی را بازتاب میدهد، اما نسخهٔ سومی از زمانبند را با خود ندارد
- تنظیمات زمانبند در سطح فضای کاری شامل نرخ یادآوری مطلوب، مراحل یادگیری، مراحل یادگیری مجدد، حداکثر فاصلهٔ مرور و fuzz (تصادفیسازی فاصله) است
- زمان واقعی مرور از
reviewedAtClientمیآید
برای جزئیات قرارداد، منطق زمانبندی FSRS در مخزن اصلی را ببینید.
احراز هویت
- کد یکبارمصرف ایمیلی از طریق Cognito
- کوکیهای نشست مرورگر با دامنهٔ مشترک برای برنامهٔ وب میزبانیشده
- آمادهسازی اولیهٔ عامل با OTP روی
auth.<domain>که خروجی آن یک ApiKey بلندمدت است AUTH_MODE=noneبرای توسعهٔ محلیAUTH_MODE=cognitoبرای احراز هویتی مشابه محیط تولید
ساختار استقرار
app.<domain>-> CloudFront + S3api.<domain>-> API Gateway + بکاند Lambdaauth.<domain>-> API Gateway + سرویس احراز هویت Lambda- Postgres در AWS RDS
دامنهٔ اصلی (apex) میتواند روی یک سایت بازاریابی جداگانه بماند. اگر هنگام راهاندازی اولیه آزاد باشد، زیرساخت میتواند آن را بهطور موقت به app.<domain> هدایت کند.