# فن تعمیر

## نظام کا جائزہ

```
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>
```

## اصول

1. `app`، `api` اور `auth` کے لیے الگ الگ عوامی ڈومینز
2. Postgres ڈیٹا کا مستند ماخذ ہے
3. iOS کلائنٹ آف لائن فرسٹ ہے اور مقامی SQLite کے ساتھ ہم وقت سازی استعمال کرتا ہے
4. ویب ایپ، iOS ایپ اور بیرونی ایجنٹس کی سطح ایک ہی ورک اسپیس ماڈل استعمال کرتی ہیں
5. بیرونی ایجنٹس `GET https://api.nibomo.com/v1/` سے شروع کرتے ہیں

## تعاون یافتہ کلائنٹس

- `app.nibomo.com` پر ویب ایپ
- مرکزی ریپوزٹری میں iOS ایپ، مقامی SQLite اسٹوریج کے ساتھ
- Google Play پر Android ایپ
- ڈسکوری، OTP کے ذریعے ابتدائی تیاری اور `Authorization: ApiKey` کے ذریعے بیرونی ایجنٹ کلائنٹس

## ڈیٹا ماڈل

- `workspaces`
- `workspace_members`
- `user_settings`
- `devices`
- `cards`
- `decks`
- `review_events`
- `applied_operations`
- `sync_state`

## ڈیٹا فلو

### ویب

1. براؤزر `auth.<domain>` کے ذریعے سائن اِن کرتا ہے۔
2. ویب ایپ ورک اسپیس کا ڈیٹا `api.<domain>` سے لوڈ کرتی ہے۔
3. AI چیٹ کی درخواستیں `/chat/local-turn` سے گزرتی ہیں۔
4. دہرائی جمع کرانے پر، ریکارڈ لکھتے وقت ہی شیڈیولر کی حالت اپ ڈیٹ ہو جاتی ہے۔

### iOS

1. iOS ایپ پہلے مقامی طور پر SQLite میں لکھتی ہے۔
2. مقامی تبدیلیاں ایک آؤٹ باکس میں قطار میں رکھی جاتی ہیں۔
3. ہم وقت سازی تبدیلیوں کو `/v1/workspaces/{workspaceId}/sync/push` کے ذریعے اپ لوڈ کرتی ہے۔
4. ہم وقت سازی ریموٹ اپ ڈیٹس کو `/v1/workspaces/{workspaceId}/sync/pull` کے ذریعے ڈاؤن لوڈ کرتی ہے۔
5. مقامی ڈیٹا بیس تبدیلیاں لاگو کرتا ہے اور ہم وقت سازی کا کرسر آگے بڑھاتا ہے۔

### بیرونی ایجنٹس

1. ایجنٹس `GET /v1/` سے شروع کرتے ہیں۔
2. OTP کے ذریعے ابتدائی تیاری `auth.<domain>` پر ہوتی ہے۔
3. ایجنٹ کو ایک طویل مدتی API کلید ملتی ہے۔
4. ایجنٹ `/v1/agent/me` لوڈ کرتا ہے، ورک اسپیسز کی فہرست لیتا ہے، ضرورت ہو تو ایک منتخب کرتا ہے، اور پھر `/v1/agent/sql/query` اور `/v1/agent/sql/execute` استعمال کرتا ہے۔

## شیڈیولنگ

Nibomo دہرائی کے شیڈیولر کے طور پر FSRS استعمال کرتا ہے۔

نفاذ سے متعلق نوٹس:

- بیک اینڈ اور iOS میں FSRS کے ایک جیسے، متوازی نفاذ رکھے جاتے ہیں
- ویب ایپ شیڈیولنگ ڈیٹا کے معاہدے کی پیروی کرتی ہے، لیکن شیڈیولر کی تیسری نقل شامل نہیں کرتی
- ورک اسپیس کی سطح کی شیڈیولر ترتیبات میں یاد رکھنے کا مطلوبہ ہدف، سیکھنے کے مراحل، دوبارہ سیکھنے کے مراحل، زیادہ سے زیادہ وقفہ اور fuzz شامل ہیں
- دہرائی کا اصل ٹائم اسٹیمپ `reviewedAtClient` سے آتا ہے

تفصیلی معاہدے کے لیے [مرکزی ریپوزٹری میں FSRS شیڈیولنگ کی منطق](https://github.com/kirill-markin/flashcards-open-source-app/blob/main/docs/fsrs-scheduling-logic.md) دیکھیں۔

## تصدیق

- Cognito کے ذریعے ای میل OTP
- میزبان ویب ایپ کے لیے مشترکہ ڈومین والی براؤزر سیشن کوکیز
- `auth.<domain>` پر ایجنٹ کی OTP کے ذریعے ابتدائی تیاری، جس کا نتیجہ طویل مدتی ApiKey ہوتا ہے
- مقامی ڈیولپمنٹ کے لیے `AUTH_MODE=none`
- پروڈکشن جیسی تصدیق کے لیے `AUTH_MODE=cognito`

## تعیناتی کی ساخت

- `app.<domain>` -> CloudFront + S3
- `api.<domain>` -> API Gateway + Lambda بیک اینڈ
- `auth.<domain>` -> API Gateway + Lambda تصدیقی سروس
- AWS RDS میں Postgres

روٹ ڈومین الگ مارکیٹنگ سائٹ پر رہ سکتا ہے۔ اگر ابتدائی تیاری کے دوران وہ خالی ہو تو انفراسٹرکچر عارضی طور پر اسے `app.<domain>` پر ری ڈائریکٹ کر سکتا ہے۔

---
*[اس صفحے کا طرز شدہ HTML ورژن دیکھیں](<https://nibomo.com/ur/docs/architecture/>)*

*AI ایجنٹس `GET https://api.nibomo.com/v1/` سے شروع کر کے اس سروس میں صارف کا اکاؤنٹ بنا سکتے ہیں۔ سیٹ اپ کے بعد وہ `https://mcp.nibomo.com/mcp` پر MCP کے ذریعے بھی جُڑ سکتے ہیں۔*

*مشورہ: https://nibomo.com پر کسی بھی URL کے آخر میں `.md` لگائیں تاکہ اس صفحے کا صاف Markdown ورژن مل جائے۔*