> ## Documentation Index
> Fetch the complete documentation index at: https://docs.dodopayments.com/llms.txt
> Use this file to discover all available pages before exploring further.

# مزامنة مع قاعدة البيانات الخاصة بك

> قم بمزامنة بيانات مدفوعات Dodo تلقائيًا مع قاعدة البيانات الخاصة بك للتحليلات والتقارير والتكاملات.

توفر مدفوعات Dodo ميزة مزامنة قاعدة البيانات المدمجة التي تقوم بمزامنة بيانات الدفع الخاصة بك تلقائيًا مع قاعدة البيانات الخاصة بك. يمكنك مزامنة **المدفوعات** و**العملاء** و**الاشتراكات** و**التراخيص** للحفاظ على نسخة محلية من بياناتك للتحليلات أو التقارير أو التكامل مع أنظمة أخرى.

<Info>
  **التنفيذ**: متاح عبر [npm package](https://www.npmjs.com/package/dodo-sync) | **رمز المصدر**: [GitHub](https://github.com/dodopayments/dodo-sync)
</Info>

## ماذا يمكنك مزامنته؟

تدعم ميزة مزامنة قاعدة البيانات لدينا مزامنة الكيانات التالية من مدفوعات Dodo إلى قاعدة البيانات الخاصة بك:

<CardGroup cols={2}>
  <Card title="Payments" icon="credit-card">
    قم بمزامنة جميع معاملات الدفع، بما في ذلك الدفعات لمرة واحدة، والمبالغ المستردة، وتحديثات حالة الدفع.
  </Card>

  <Card title="Customers" icon="users">
    حافظ على تزامن بيانات العملاء، بما في ذلك ملفات تعريف العملاء، ومعلومات الاتصال، والبيانات الوصفية.
  </Card>

  <Card title="Subscriptions" icon="repeat">
    قم بمزامنة بيانات الاشتراكات، بما في ذلك الاشتراكات النشطة، ودورات الفوترة، وتغييرات حالة الاشتراك.
  </Card>

  <Card title="Licenses" icon="key">
    قم بمزامنة معلومات الترخيص، بما في ذلك مفاتيح الترخيص، والتفعيلات، وتحديثات حالة الترخيص.
  </Card>
</CardGroup>

يمكنك مزامنة أي توليفة من هذه الكيانات عن طريق تحديدها في المعامل `scopes`. جميع عمليات المزامنة تدريجية وتنقل فقط السجلات الجديدة أو المحدثة لتحقيق أفضل أداء.

## دعم قاعدة البيانات

ندعم حاليًا **MongoDB** و**PostgreSQL** و**MySQL** و**ClickHouse**.

نعمل بنشاط على توسيع الدعم لـ:

* **قواعد البيانات**: Snowflake وغيرها.
* **خطوط الأنابيب**: خطوط أنابيب ETL، المزامنة في الوقت الحقيقي.

<Tip>
  نحن نقوم بتوسيع دعم قواعد البيانات باستمرار. إذا رغبت في المساهمة بتكامل قاعدة بيانات جديدة، يرجى تقديم طلب سحب إلى [مستودعنا على GitHub](https://github.com/dodopayments/dodo-sync).
</Tip>

## البدء

يمكنك استخدام ميزة مزامنة قاعدة البيانات لدينا عبر **CLI** أو برمجيًا في **الكود** الخاص بك. توفر كلا الطريقتين نفس الوظائف—اختر الطريقة التي تناسب سير العمل الخاص بك.

### استخدام CLI

يوفر أداة CLI طريقة سريعة لإعداد وتشغيل مزامنة قاعدة البيانات. قم بتثبيته عالميًا لاستخدامه من أي مكان في الطرفية الخاصة بك:

<CodeGroup>
  ```bash npm theme={null}
  npm install -g dodo-sync
  ```

  ```bash bun theme={null}
  bun add -g dodo-sync
  ```
</CodeGroup>

#### تشغيل CLI

يدعم CLI وضعين: **الوضع التفاعلي** للإعداد الموجه، و**الوضع اليدوي** للتكوين المباشر.

**الوضع التفاعلي**: قم بتشغيل الأمر بدون معلمات لبدء معالج الإعداد التفاعلي.

```bash theme={null}
dodo-sync
```

**الوضع اليدوي**: مرر المعلمات مباشرة لتخطي المعالج.

```bash theme={null}
dodo-sync -i [interval] -d [database] -u [database_uri] --scopes [scopes] --api-key [api_key] --env [environment]
```

**أمثلة:**

```bash theme={null}
# MongoDB
dodo-sync -i 600 -d mongodb -u mongodb://mymongodb.url --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# PostgreSQL
dodo-sync -i 600 -d postgres -u postgresql://user:password@localhost:5432/mydb --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# MySQL
dodo-sync -i 600 -d mysql -u mysql://user:password@localhost:3306/mydb --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode

# ClickHouse
dodo-sync -i 600 -d clickhouse -u http://localhost:8123 --scopes "licences,payments,customers,subscriptions" --api-key YOUR_API_KEY --env test_mode
```

#### معلمات CLI

<ParamField path="--interval" type="number" alias="-i">
  فاصل المزامنة بالثواني. يحدد عدد مرات تشغيل عملية المزامنة. إذا لم يتم توفيره، فسيتم تشغيل المزامنة مرة واحدة ثم التوقف.
</ParamField>

<ParamField path="--database" type="string" alias="-d" required>
  نوع قاعدة البيانات المراد استخدامها. القيم المدعومة: `"mongodb"`، `"postgres"`، `"mysql"`، أو `"clickhouse"`.
</ParamField>

<ParamField path="--database-uri" type="string" alias="-u" required>
  سلسلة اتصال لقاعدة البيانات الخاصة بك:

  * **MongoDB**: `mongodb://localhost:27017` أو `mongodb+srv://user:pass@cluster.mongodb.net/`
  * **PostgreSQL**: `postgresql://user:password@localhost:5432/mydb`
  * **MySQL**: `mysql://user:password@localhost:3306/mydb`
  * **ClickHouse**: `http://localhost:8123`
</ParamField>

<ParamField path="--scopes" type="string" required>
  قائمة مفصولة بفواصل للكيانات المراد مزامنتها. النطاقات المتاحة: `licences`، `payments`، `customers`، `subscriptions`. على سبيل المثال: `"payments,customers"`.
</ParamField>

<ParamField path="--api-key" type="string" required>
  مفتاح واجهة برمجة تطبيقات Dodo Payments الخاص بك. يجب أن يبدأ بـ `dp_live_` في وضع الإنتاج أو `dp_test_` في وضع الاختبار.
</ParamField>

<ParamField path="--env" type="string" required>
  البيئة المستهدفة. يجب أن تكون إما `"live_mode"` أو `"test_mode"`. هذا يحدد البيئة التي سيتم المزامنة منها في Dodo Payments.
</ParamField>

<ParamField path="--rate-limit" type="number" alias="--rl">
  معدل الطلبات في الثانية. يتحكم في سرعة إرسال محرك المزامنة لطلبات واجهة برمجة التطبيقات لتجنب إثقال واجهة Dodo Payments.
</ParamField>

### الاستخدام في الكود الخاص بك

للحصول على تحكم برمجي، قم بدمج ميزة المزامنة مباشرة في تطبيقك. قم بتثبيتها كاعتماد في مشروعك:

<CodeGroup>
  ```bash npm theme={null}
  npm install dodo-sync
  ```

  ```bash bun theme={null}
  bun add dodo-sync
  ```
</CodeGroup>

#### المزامنة التلقائية (استنادًا إلى الفترات)

استخدم المزامنة التلقائية عندما تريد أن تعمل المزامنة باستمرار على فترات منتظمة:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60, // Sync every 60 seconds
  database: 'mongodb',
  databaseURI: process.env.MONGODB_URI, // e.g., 'mongodb://localhost:27017'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode' // or 'live_mode'
  }
});

// Initialize connection
await syncDodoPayments.init();

// Start the sync loop
syncDodoPayments.start();
```

<Tip>
  الخيار `interval` مطلوب عند استخدام `.start()` للمزامنة التلقائية. ستعمل المزامنة باستمرار عند الفاصل المحدد حتى يتم إيقاف العملية.
</Tip>

#### المزامنة اليدوية

استخدم المزامنة اليدوية عندما تريد تشغيل عمليات المزامنة عند الطلب (على سبيل المثال، من مهمة cron أو نقطة نهاية API):

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  database: 'mongodb',
  databaseURI: process.env.MONGODB_URI,
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

// Initialize connection
await syncDodoPayments.init();

// Trigger a single sync operation
await syncDodoPayments.run();
```

<Tip>
  عند استخدام المزامنة اليدوية، لا يكون الخيار `interval` مطلوبًا. يمكنك استدعاء `.run()` كلما احتجت إلى تنفيذ عملية مزامنة.
</Tip>

#### مثال PostgreSQL

إليك كيفية استخدام `dodo-sync` مع PostgreSQL:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'postgres',
  databaseURI: process.env.POSTGRES_URI, // e.g., 'postgresql://user:password@localhost:5432/mydb'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### مثال MySQL

إليك كيفية استخدام `dodo-sync` مع MySQL:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'mysql',
  databaseURI: process.env.MYSQL_URI, // e.g., 'mysql://user:password@localhost:3306/mydb'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### مثال ClickHouse

إليك كيفية استخدام `dodo-sync` مع ClickHouse:

```typescript theme={null}
import { DodoSync } from 'dodo-sync';

const syncDodoPayments = new DodoSync({
  interval: 60,
  database: 'clickhouse',
  databaseURI: process.env.CLICKHOUSE_URI, // e.g., 'http://localhost:8123'
  scopes: ['licences', 'payments', 'customers', 'subscriptions'],
  dodoPaymentsOptions: {
    bearerToken: process.env.DODO_PAYMENTS_API_KEY,
    environment: 'test_mode'
  }
});

await syncDodoPayments.init();
syncDodoPayments.start();
```

#### خيارات المُنشئ

<ParamField body="database" type="string" required>
  اسم قاعدة البيانات المطلوب استخدامها. القيم المدعومة: `"mongodb"`، `"postgres"`، `"mysql"`، أو `"clickhouse"`.
</ParamField>

<ParamField body="databaseURI" type="string" required>
  سلسلة الاتصال لقاعدة البيانات الخاصة بك:

  * **MongoDB**: `mongodb://localhost:27017` أو `mongodb+srv://...`
  * **PostgreSQL**: `postgresql://user:password@localhost:5432/mydb`
  * **MySQL**: `mysql://user:password@localhost:3306/mydb`
  * **ClickHouse**: `http://localhost:8123`
</ParamField>

<ParamField body="scopes" type="string[]" required>
  مصفوفة الكيانات المراد مزامنتها. الخيارات المتاحة: `"licences"`، `"payments"`، `"customers"`، `"subscriptions"`. يمكنك تضمين أي توليفة منها.
</ParamField>

<ParamField body="dodoPaymentsOptions" type="object" required>
  تكوين واجهة برمجة تطبيقات Dodo Payments للمصادقة وتحديد البيئة. راجع [أنواع SDK لـ TypeScript](https://github.com/dodopayments/dodopayments-typescript/blob/main/src/client.ts) للحصول على الخيارات الكاملة.

  **الخصائص المطلوبة:**

  * `bearerToken`: مفتاح واجهة برمجة تطبيقات Dodo Payments الخاص بك
  * `environment`: إما `"test_mode"` أو `"live_mode"`
</ParamField>

<ParamField body="interval" type="number">
  الوقت بالثواني بين المزامنات التلقائية. مطلوب عند استخدام `.start()` للمزامنة التلقائية. اختياري عند استخدام `.run()` للمزامنة اليدوية.
</ParamField>

<ParamField body="rateLimit" type="number">
  عدد الطلبات في الثانية. يتحكم في سرعة إرسال محرك المزامنة لطلبات واجهة برمجة التطبيقات لتجنب إثقال Dodo Payments.
</ParamField>

## معلومات هامة

<Warning>
  **MongoDB**: سيتم إنشاء قاعدة بيانات باسم `dodopayments_sync` تلقائيًا على خادم قاعدة البيانات الخاص بك. سيتم تخزين جميع بيانات المزامنة هناك. هذا الاسم ثابت حاليًا ولا يمكن تغييره.

  **PostgreSQL**: سيتم إنشاء الجداول (`Subscriptions`، `Payments`، `Licenses`، `Customers`) في قاعدة البيانات المحددة في سلسلة الاتصال الخاصة بك. يتم تخزين البيانات كـ JSONB.

  **MySQL**: سيتم إنشاء الجداول (`Subscriptions`، `Payments`، `Licenses`، `Customers`) في قاعدة البيانات المحددة في سلسلة الاتصال الخاصة بك. يتم تخزين البيانات كـ JSON.

  **ClickHouse**: سيتم إنشاء الجداول (`Subscriptions`، `Payments`، `Licenses`، `Customers`) باستخدام محرك ReplacingMergeTree. عند الاستعلام، استخدم الكلمة المفتاحية `FINAL` لضمان نتائج خالية من التكرار.
</Warning>

<Info>
  يتتبع محرك المزامنة التغييرات ويزامن فقط السجلات الجديدة أو المحدثة، مما يجعل المزامنات اللاحقة فعالة حتى مع مجموعات البيانات الكبيرة.
</Info>

## موارد إضافية

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/dodo-sync">
    عرض رمز المصدر، الإبلاغ عن المشكلات، أو المساهمة بالتحسينات
  </Card>

  <Card title="npm Package" icon="box-open" href="https://www.npmjs.com/package/dodo-sync">
    عرض تفاصيل الحزمة وتعليمات التثبيت
  </Card>
</CardGroup>
