> ## 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.

# Sinkronkan dengan Database Anda

> Secara otomatis menyinkronkan data <Info> Anda ke database sendiri untuk analytics, pelaporan, dan integrasi.

Dodo Payments menyediakan fitur sinkronisasi database bawaan yang secara otomatis menyinkronkan data pembayaran Anda dengan database sendiri. Anda dapat menyinkronkan **payments**, **customers**, **subscriptions**, dan **licenses** untuk mempertahankan salinan lokal data Anda untuk analytics, pelaporan, atau integrasi dengan sistem lain.

<Info>
  **Implementasi**: Tersedia melalui [npm package](https://www.npmjs.com/package/dodo-sync) | **Source Code**: [GitHub](https://github.com/dodopayments/dodo-sync)
</Info>

## Apa yang Dapat Anda Sinkronkan?

Fitur sinkronisasi database kami mendukung sinkronisasi entitas Dodo Payments berikut ke database Anda:

<CardGroup cols={2}>
  <Card title="Payments" icon="credit-card">
    Sinkronkan semua transaksi pembayaran, termasuk pembayaran satu kali, refund, dan pembaruan status pembayaran.
  </Card>

  <Card title="Customers" icon="users">
    Pertahankan sinkronisasi data pelanggan, termasuk profil pelanggan, informasi kontak, dan metadata.
  </Card>

  <Card title="Subscriptions" icon="repeat">
    Sinkronkan data subscription, termasuk subscription aktif, siklus penagihan, dan perubahan status subscription.
  </Card>

  <Card title="Licenses" icon="key">
    Sinkronkan informasi lisensi, termasuk kunci lisensi, aktivasi, dan pembaruan status lisensi.
  </Card>
</CardGroup>

Anda dapat menyinkronkan kombinasi entitas apa pun dengan menentukannya dalam parameter `scopes`. Semua operasi sinkronisasi bersifat inkremental dan hanya mentransfer record baru atau yang diperbarui untuk performa optimal.

## Dukungan Database

Saat ini kami mendukung **MongoDB**, **PostgreSQL**, **MySQL**, dan **ClickHouse**.

Kami sedang aktif memperluas dukungan untuk:

* **Database**: Snowflake dan lainnya.
* **Pipeline**: pipeline ETL, sinkronisasi Realtime.

<Tip>
  Kami terus memperluas dukungan database. Jika Anda ingin berkontribusi dengan integrasi database baru, silakan kirim Pull Request ke [repositori GitHub](https://github.com/dodopayments/dodo-sync) kami.
</Tip>

## Memulai

Anda dapat menggunakan fitur sinkronisasi database kami melalui **CLI** atau secara programatis dalam **code** Anda. Kedua metode menyediakan fungsi yang sama—pilih metode yang paling sesuai dengan workflow Anda.

### Menggunakan CLI

Tool CLI menyediakan cara cepat untuk menyiapkan dan menjalankan sinkronisasi database. Instal secara global agar dapat menggunakannya dari mana saja di terminal Anda:

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

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

#### Menjalankan CLI

CLI mendukung dua mode: **Interactive Mode** untuk penyiapan terpandu, dan **Manual Mode** untuk konfigurasi langsung.

**Interactive Mode**: Jalankan command tanpa argumen untuk memulai wizard penyiapan interaktif.

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

**Manual Mode**: Berikan argumen secara langsung untuk melewati wizard.

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

**Contoh:**

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

#### Argumen CLI

<ParamField path="--interval" type="number" alias="-i">
  Interval sinkronisasi dalam detik. Menentukan seberapa sering operasi sinkronisasi dijalankan. Jika tidak diberikan, sinkronisasi akan dijalankan sekali lalu berhenti.
</ParamField>

<ParamField path="--database" type="string" alias="-d" required>
  Jenis database yang akan digunakan. Nilai yang didukung: `"mongodb"`, `"postgres"`, `"mysql"`, atau `"clickhouse"`.
</ParamField>

<ParamField path="--database-uri" type="string" alias="-u" required>
  URI koneksi untuk database Anda:

  * **MongoDB**: `mongodb://localhost:27017` atau `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>
  Daftar entitas data yang akan disinkronkan, dipisahkan dengan koma. Scope yang tersedia: `licences`, `payments`, `customers`, `subscriptions`. Contoh: `"payments,customers"`.
</ParamField>

<ParamField path="--api-key" type="string" required>
  API key Dodo Payments Anda. Harus dimulai dengan `dp_live_` untuk live mode atau `dp_test_` untuk test mode.
</ParamField>

<ParamField path="--env" type="string" required>
  Target environment. Harus berupa `"live_mode"` atau `"test_mode"`. Ini menentukan environment Dodo Payments mana yang akan disinkronkan.
</ParamField>

<ParamField path="--rate-limit" type="number" alias="--rl">
  Rate limit dalam request per detik. Mengontrol seberapa cepat sync engine membuat request API agar tidak membebani API Dodo Payments.
</ParamField>

### Menggunakan dalam Code Anda

Untuk kontrol programatis, integrasikan fitur sinkronisasi langsung ke aplikasi Anda. Instal sebagai dependency dalam project Anda:

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

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

#### Sinkronisasi Otomatis (Berbasis Interval)

Gunakan sinkronisasi otomatis jika Anda ingin sinkronisasi berjalan terus-menerus pada interval reguler:

```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>
  Opsi `interval` diperlukan saat menggunakan `.start()` untuk sinkronisasi otomatis. Sinkronisasi akan berjalan terus-menerus pada interval yang ditentukan hingga proses dihentikan.
</Tip>

#### Sinkronisasi Manual

Gunakan sinkronisasi manual jika Anda ingin memicu operasi sinkronisasi sesuai kebutuhan (misalnya, dari cron job atau endpoint 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>
  Saat menggunakan sinkronisasi manual, opsi `interval` tidak diperlukan. Anda dapat memanggil `.run()` kapan pun perlu menjalankan operasi sinkronisasi.
</Tip>

#### Contoh PostgreSQL

Berikut cara menggunakan `dodo-sync` dengan 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();
```

#### Contoh MySQL

Berikut cara menggunakan `dodo-sync` dengan 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();
```

#### Contoh ClickHouse

Berikut cara menggunakan `dodo-sync` dengan 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();
```

#### Opsi Constructor

<ParamField body="database" type="string" required>
  Nama database yang akan digunakan. Nilai yang didukung: `"mongodb"`, `"postgres"`, `"mysql"`, atau `"clickhouse"`.
</ParamField>

<ParamField body="databaseURI" type="string" required>
  Connection string untuk database Anda:

  * **MongoDB**: `mongodb://localhost:27017` atau `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>
  Array entitas yang akan disinkronkan. Opsi yang tersedia: `"licences"`, `"payments"`, `"customers"`, `"subscriptions"`. Anda dapat menyertakan kombinasi apa pun dari opsi tersebut.
</ParamField>

<ParamField body="dodoPaymentsOptions" type="object" required>
  Konfigurasi API Dodo Payments untuk autentikasi dan pemilihan environment. Lihat [TypeScript SDK types](https://github.com/dodopayments/dodopayments-typescript/blob/main/src/client.ts) untuk opsi lengkap.

  **Properti yang diperlukan:**

  * `bearerToken`: API key Dodo Payments Anda
  * `environment`: `"test_mode"` atau `"live_mode"`
</ParamField>

<ParamField body="interval" type="number">
  Waktu dalam detik di antara sinkronisasi otomatis. Diperlukan saat menggunakan `.start()` untuk sinkronisasi otomatis. Opsional saat menggunakan `.run()` untuk sinkronisasi manual.
</ParamField>

<ParamField body="rateLimit" type="number">
  Jumlah request per detik. Mengontrol seberapa cepat sync engine membuat request API agar tidak membebani API Dodo Payments.
</ParamField>

## Informasi Penting

<Warning>
  **MongoDB**: Database bernama `dodopayments_sync` akan dibuat secara otomatis di server database Anda. Semua data sinkronisasi akan disimpan di sana. Nama database ini saat ini tetap dan tidak dapat diubah.

  **PostgreSQL**: Tabel (`Subscriptions`, `Payments`, `Licenses`, `Customers`) akan dibuat di database yang ditentukan dalam URI koneksi Anda. Data disimpan sebagai JSONB.

  **MySQL**: Tabel (`Subscriptions`, `Payments`, `Licenses`, `Customers`) akan dibuat di database yang ditentukan dalam URI koneksi Anda. Data disimpan sebagai JSON.

  **ClickHouse**: Tabel (`Subscriptions`, `Payments`, `Licenses`, `Customers`) akan dibuat menggunakan engine ReplacingMergeTree. Saat melakukan query, gunakan keyword `FINAL` untuk memastikan hasil yang dideduplikasi.
</Warning>

<Info>
  Sync engine melacak perubahan dan hanya menyinkronkan record baru atau yang diperbarui, sehingga sinkronisasi berikutnya tetap efisien bahkan dengan dataset besar.
</Info>

## Referensi Tambahan

<CardGroup cols={2}>
  <Card title="GitHub Repository" icon="github" href="https://github.com/dodopayments/dodo-sync">
    Lihat source code, laporkan masalah, atau kontribusikan perbaikan
  </Card>

  <Card title="npm Package" icon="box-open" href="https://www.npmjs.com/package/dodo-sync">
    Lihat detail package dan instruksi instalasi
  </Card>
</CardGroup>
