D
Engineering

Architecture

Arsitektur microservice Konco — dazo-whitelist (Livewire/Blade web app, port 8000) memanggil dazo-whitelist-api (REST engine, port 8081) via GuzzleHTTP dengan RSA signature + Passport token. Meta Graph v20.0 diisolasi di API engine. Scheduler & queue worker jalan paralel.

Konco adalah arsitektur microservice dua-repo — dazo-whitelist (web app) dan dazo-whitelist-api (Meta API engine) — yang berkomunikasi via REST API diamankan RSA signature + Passport Bearer Token. Meta Graph API v20.0 sepenuhnya diisolasi di API engine.

Diagram alur

text
┌────────────────────────────────────────────────────────────────────────┐
│                        DAZO-WHITELIST (Konco Web)                       │
│                      Frontend Web App / SaaS (Port 8000)                 │
│                                                                        │
│   Browser ─── Livewire/Blade ─── Controllers (thin) ─── Services       │
│                                     │                                   │
│                                     │ App\Src\MyApi / FacebookApi        │
│                                     │ (GuzzleHTTP + RSA sign + Bearer)   │
│   Reverb WS ◄── Events ◄── Observers │                                   │
│   Schedule:work ───── Cron jobs ─────┘                                   │
└───────────────────────────────────┬────────────────────────────────────┘
                                    │ POST /api/application/token (RSA)
                                    │ Authorization: Bearer {PassportToken}
                                    ▼
┌───────────────────────────────────────────────────────────────────────┐
│                      DAZO-WHITELIST-API (Port 8081)                    │
│                   Dedicated Meta Marketing API Engine                  │
│                                                                        │
│   ValidateSignature (signed URL) ─── Auth:api (Passport) ─── myapi     │
│                                          │                              │
│   Controllers ─── Services ─── Jobs (Queue)                            │
│                   │                                                     │
│                   │ FacebookApiService (php-business-sdk ^20.0)         │
│                   │ FacebookTokenManagerService                         │
│                   │ FacebookImportService                               │
│                   │ TransferBalanceService                              │
│                   ▼                                                     │
│   Meta Graph API v20.0 ──── 🌐 Facebook Servers                       │
└───────────────────────────────────────────────────────────────────────┘

Separation of concerns

Aspekdazo-whitelist (Web)dazo-whitelist-api (Engine)
FokusUX, business logic, billing, role, invoicingKoneksi Meta Graph, token lifecycle, import massal, mutasi spend cap
UILivewire 2.x + Blade + Bootstrap 4 + CoreUI 5Tidak ada — REST API only
Auth end-userSession guard member + guard admin + Google 2FATidak ada — hanya Passport client_credentials
DatabasePostgreSQL (default)MySQL / MariaDB
Background jobsSync (Queue sync) — scheduler jalan via schedule:workDatabase queue — import massal via ImportAdAccountsJob
RealtimeLaravel Reverb + Echo + Pusher JSTidak ada
Meta GraphTidak langsung — via API engineLangsung via facebook/php-business-sdk ^20.0

Lapisan dazo-whitelist (web app)

text
Browser
  │
  ▼
Livewire Components (app/Http/Livewire/)  ─── real-time UI, polling
  │
  ▼
Controllers (app/Http/Controllers/)  ─── thin, delegasi ke Services
  │
  ▼
Services (app/Services/)  ─── business logic layer
  ├── OrderService          # subscribe & topup
  ├── PaymentService        # gateway integration
  ├── AdminRequestService   # approval workflow
  ├── TeamService           # team management
  ├── PermissionService     # role/permission
  └── MonitpayService       # MonitPay specific
  │
  ▼
App\Src\MyApi / FacebookApi  ─── GuzzleHTTP ke API engine
  │                              + RSA sign + Passport Bearer
  ▼
dazo-whitelist-api (port 8081)

Lapisan dazo-whitelist-api (engine)

text
REST Request (from dazo-whitelist)
  │
  ▼
Middleware stack
  ├── auth:api   (Passport Bearer token)
  └── myapi      (cek header public-key vs user->public_key)
  │
  ▼
Controllers (app/Http/Controllers/)
  ├── ApplicationController    # RSA verify, token issue
  ├── FacebookOAuthController  # OAuth URL, callback, accounts
  ├── FacebookBusinessController # BM fetch/import/rename
  ├── FacebookAdAccountController # campaigns, adsets, ads, status, budget
  ├── FacebookImportController  # import jobs progress/cancel
  ├── AccountController        # spend cap, balance, insight, rename
  ├── BusinessController       # BM operations
  └── TransferBalanceController # transfer saldo antar-akun
  │
  ▼
Services (app/Services/)
  ├── FacebookApiService           # wrapper Meta Graph SDK
  ├── FacebookTokenManagerService  # token rotation & validation
  ├── FacebookImportService        # chunked import logic
  └── TransferBalanceService       # atomic balance mutations
  │
  ├──► Jobs (app/Jobs/)
  │    ├── ImportAdAccountsJob     # background import massal
  │    ├── SyncAccount             # sync data akun
  │    └── TransferBalanceJob      # eksekusi transfer via queue
  │
  ▼
Meta Graph API v20.0 (via php-business-sdk)

Scheduler (dazo-whitelist)

Scheduler berjalan via php artisan schedule:work (dimulai oleh local:start). Definisi ada di app/Console/Kernel.php:

CommandFrekuensiFungsi
cron:ads-expiredTiap menitReminder email H-7/H-3/H-1 ke member + grace notification 30D + auto-deactivate akun lewat grace
expiry:orderTiap menitBatalkan order/invoice belum dibayar melewati batas waktu
monitpay:syncTiap 2 menitSinkronisasi status transaksi MonitPay (timeout 5 menit)
meta:monitorTiap 30 menitMonitoring status & metrik akun iklan Meta (log storage/logs/meta-monitor.log)
ads:sync-active-campaignsTiap jamSinkronisasi status kampanye aktif dari Meta API
notify:subscription-reminder --interval=3600Tiap jamReminder ke admin untuk order paid belum diproses + reminder withdraw
Scheduled exportHarian 07:00Dispatch SendScheduledAdsExportJob untuk jadwal AdsExportSchedule daily & weekly

Scheduler (dazo-whitelist-api)

Hanya satu scheduled command di API engine:

CommandFrekuensiFungsi
facebook:refresh-tokensdailyAt('02:00') + emailOutputOnFailure('support@konco.id')Refresh token dengan expires_at <= now()+7 hari, tukar dengan long-lived token (60 hari), tandai needs_reauth=true bila gagal

Bahasa & konvensi kode

AspekKonvensi
Bahasa kode & UIIndonesia (komentar, field database, label)
PSRPSR-12 untuk PHP
PatternService Layer (app/Services/), thin Controllers, Observer pattern
Model traits wajibApp\Traits\UUID, App\Traits\WithAuthor
Frontend real-timeLivewire 2.x + Reverb (WebSocket)
AuthMulti-guard: member (default), admin + Google 2FA

Yang TIDAK boleh diubah tanpa koordinasi

AreaLokasi
Payload RSA signatureApp\Src\MyApi::get_token ↔ ApplicationController::token — `implode(’
Headers handshakex-client-key, x-timestamp, x-signature, Authorization: Bearer, public-key
Passport token storageTabel configs (kolom api_token) di dazo-whitelist
Public key clientstorage/rsa_keys/public_key.pem ↔ kolom public_key tabel applications di API engine
Meta Graph versionFACEBOOK_GRAPH_VERSION=v20.0 (di API engine .env)

Langkah berikutnya