Skip to main content

πŸ“š Manajemen Collection API (Bruno/Postman) di MStore ERP

Dokumen ini menjelaskan kerumitan dan strategi struktur collection Bruno/Postman untuk MStore ERP yang melayani multi-tenant, multi-company, multi-branch, multi-negara, dan multi-holding.

1. Konteks: Kenapa Collection Jadi Rumit?

MStore beroperasi di konteks:
  • Multi-tenant & multi-company (holding, subholding, subsidiary).
  • Multi-branch per company (store, warehouse, outlet).
  • Multi-negara (beda aturan pajak, mata uang, format invoice).
  • Multi-role (cashier, owner, finance, auditor, ops, system).
  • Banyak domain: Auth, Organization, Orders, Inventory, Finance, Tax, HR, Integrations, Compliance.
Tanpa desain yang rapi, collection cenderung menjadi:
  • Duplikasi folder per negara.
  • Duplikasi folder per role.
  • Sulit dipakai ulang lintas entity/country.
  • Susah dipahami tester/QA baru.

2. Kondisi Aktual Bruno Collections

Lokasi: mstore_backend/third_party/bruno Struktur utama saat ini (disederhanakan):
third_party/bruno
β”œβ”€β”€ 00_API-Xendit          # Integrasi payment gateway
β”œβ”€β”€ 00_V3_XENDIT           # Versi lain Xendit
β”œβ”€β”€ 00_XENDIT_TEST_SELF    # Playground/payment test
β”œβ”€β”€ 01_FLOW_MSTORE         # Flow end-to-end + RBAC
β”œβ”€β”€ 02_API_L0              # API per role level 0 (Cashier, Owner, Viewer)
β”œβ”€β”€ 03_API_L1              # API per role level 1 (AUD, FIN-MGR, INV-MGR, dst.)
β”œβ”€β”€ 04_API_L2              # (reserved / pattern serupa)
β”œβ”€β”€ 05_API_L3              # (reserved / pattern serupa)
β”œβ”€β”€ 06_API_L4              # (reserved / pattern serupa)
β”œβ”€β”€ 98_MSTORE              # Domain-level: ONBOARDING, AUTH, PRODUCT, INVENTORY, REPORT, TRANSACTION, dst.
└── README_API_LEVELS.md   # Penjelasan API levels & RBAC
Observasi:
  • Sudah ada domain-level di 98_MSTORE (ONBOARDING, AUTH, INVENTORY, PRODUCT, REPORT, TRANSACTION, dll.).
  • Sudah ada flow-level di 01_FLOW_MSTORE (AUTH FLOW, FLOW CHECKOUT QRIS, SUBMIT PAYMENT POS, dsb.).
  • Masih banyak folder per-role di 02_API_L0, 03_API_L1, dst. dengan subfolder seperti:
    02_API_L0/
    β”œβ”€β”€ L0_CASHIER
    β”œβ”€β”€ L0_OWNER
    └── L0_VIEWER
    
    03_API_L1/
    β”œβ”€β”€ L1_AUD
    β”œβ”€β”€ L1_CSH
    β”œβ”€β”€ L1_FIN-MGR
    β”œβ”€β”€ L1_HR-MGR
    β”œβ”€β”€ L1_INV-MGR
    └── L1_OWN-MGR
    
  • Tiap collection memiliki folder environments/ untuk konfigurasi.
Kesimpulan:
  • Kamu sudah bergerak ke arah domain-based + flow-based (bagus).
  • Tapi masih ada kompleksitas tinggi karena duplikasi per role di API_L0..L4.

3. Blueprint Ideal (Dari Draft Konsep)

Ringkasan blueprint ideal (dari dokumen konsep di editor):

3.1 Domainization

Struktur utama berbasis domain bisnis:
Enterprise ERP (Collection)
β”œβ”€β”€ Auth
β”œβ”€β”€ Organization
β”œβ”€β”€ Orders
β”œβ”€β”€ Inventory
β”œβ”€β”€ Finance
β”œβ”€β”€ Tax
β”œβ”€β”€ HR
β”œβ”€β”€ Integrations
└── Compliance

3.2 Environmentization

Variasi negara / entity / role dipindah ke environment, bukan folder:
{
  "base_url": "https://api-global.erp.company.com",
  "entity_id": "HK-001",
  "country_code": "HK",
  "currency": "HKD",
  "vat_rate": 0,
  "withholding_rate": 0.02,
  "role": "finance_local",
  "token": "{{dynamic_token}}"
}

3.3 Flow Mapping

Workflow panjang direpresentasikan dengan prefix urutan:
Orders
β”œβ”€β”€ 01_draft
β”œβ”€β”€ 02_approved
β”œβ”€β”€ 03_paid
β”œβ”€β”€ 04_picked
β”œβ”€β”€ 05_shipped
└── 06_settled

4. Gap Analysis: Blueprint vs Bruno Saat Ini

4.1 Sudah Selaras

  • Domainization (parsial):
    • 98_MSTORE sudah berisi domain: ONBOARDING, AUTH, MERCHANT, PRODUCT, INVENTORY, TRANSACTION, REPORT, dll.
    • 00_API-Xendit dan 00_V3_XENDIT sudah terpisah sebagai domain Integrations β†’ Payment.
  • Flow Mapping (parsial):
    • 01_FLOW_MSTORE menyimpan flow seperti AUTH FLOW, FLOW CHECKOUT QRIS, SUBMIT PAYMENT POS, dsb.
    • Sudah memakai pola flow per use-case, meskipun belum full 01_, 02_ konsisten.
  • Environmentization (parsial):
    • Masing-masing collection Bruno punya folder environments/ untuk token, base_url, dsb.

4.2 Belum Selaras / Titik Kerumitan

  • Folder per role (L0_CASHIER, L0_OWNER, L1_FIN-MGR, dll.) masih mendominasi:
    • Menyulitkan reuse request antar role.
    • Menambah overhead maintenance kalau ada perubahan endpoint.
  • Belum ada domain khusus untuk:
    • Organization (entity_list, entity_switch, permission_matrix).
    • Tax (vat/gst/withholding/invoice numbering).
    • Compliance (audit_logs, data_retention).
  • Flows belum sepenuhnya distandarisasi:
    • Beberapa flow ada di 01_FLOW_MSTORE, sebagian lain tersebar di domain lain.

5. Rekomendasi Refactor Bertahap

5.1 Langkah 1 – Tetapkan β€œCollection Induk” Domain-Based

Gunakan 98_MSTORE sebagai root domain collection untuk MStore ERP:
98_MSTORE
β”œβ”€β”€ AUTH
β”œβ”€β”€ MERCHANT / ORGANIZATION
β”œβ”€β”€ PRODUCT
β”œβ”€β”€ INVENTORY
β”œβ”€β”€ TRANSACTION / ORDERS
β”œβ”€β”€ FINANCE (AR/AP/GL)
β”œβ”€β”€ TAX
β”œβ”€β”€ HR
β”œβ”€β”€ INTEGRATIONS (link ke 00_API-Xendit, dll.)
└── COMPLIANCE
Actionable:
  • Rename/struktur ulang folder di 98_MSTORE supaya mirip blueprint domain.
  • Jadikan 98_MSTORE sumber utama semua endpoint; folder API_L0..L4 hanya view/filter.

5.2 Langkah 2 – Pindahkan Role ke Environment

Alih-alih folder per role:
02_API_L0/L0_CASHIER
02_API_L0/L0_OWNER
03_API_L1/L1_FIN-MGR
...
gunakan environment per role:
environments/
β”œβ”€β”€ L0_CASHIER.json
β”œβ”€β”€ L0_OWNER.json
β”œβ”€β”€ L1_FIN_MGR.json
β”œβ”€β”€ L1_INV_MGR.json
└── AUDITOR.json
Isi env mengontrol:
{
  "base_url": "{{base_url_mstore}}",
  "role": "L1_FIN_MGR",
  "token": "{{jwt_token}}",
  "entity_id": "COMP-ID-001",
  "country_code": "ID"
}
Manfaat:
  • Endpoint cukup 1 kali di domain (misal POST /v1/transaction), behavior beda tergantung role/env.
  • Mengurangi duplikasi folder & request.

5.3 Langkah 3 – Standarisasi Flow Folder

Konsolidasikan flow di 01_FLOW_MSTORE dan domain terkait:
01_FLOW_MSTORE
β”œβ”€β”€ AUTH FLOW
β”œβ”€β”€ ONBOARDING MERCHANT
β”œβ”€β”€ POS CHECKOUT
β”œβ”€β”€ STOCK OPNAME
└── INTERCOMPANY BILLING
Di domain TRANSACTION / ORDERS, gunakan prefix default:
TRANSACTION
β”œβ”€β”€ 01_create_draft
β”œβ”€β”€ 02_approve
β”œβ”€β”€ 03_pay
β”œβ”€β”€ 04_fulfill
└── 05_close

5.4 Langkah 4 – Tambah Domain Organization, Tax, Compliance

Buat domain baru di 98_MSTORE:
  • ORGANIZATION:
    • GET /entities, POST /entity/switch, GET /permissions/matrix.
  • TAX:
    • POST /tax/calculate, GET /tax/rates, GET /invoice/numbering.
  • COMPLIANCE:
    • GET /audit/logs, GET /data-retention/policies.
Ini mengikuti blueprint di dokumen konsep kamu.

6. Pola Penamaan & Konvensi

Rekomendasi singkat:
  • Folder: UPPER_SNAKE_CASE untuk domain utama (AUTH, INVENTORY, FINANCE).
  • Subfolder flow: prefix numerik 01_, 02_, 03_ untuk urutan.
  • Request: HTTP_METHOD + tujuan (contoh: POST - Create Transaction, GET - List Inventory).
  • Environment:
    • Nama: ENV_{COUNTRY}_{ROLE} (misal: ENV_ID_L1_FIN, ENV_SG_AUDITOR).

7. Ringkasan

  • Faktual:
    • Struktur Bruno saat ini sudah punya kombinasi domain-level, flow-level, dan API level per role.
    • Kompleksitas terbesar datang dari duplikasi folder per role dan per level API.
  • Rekomendasi:
    • Jadikan 98_MSTORE sebagai collection domain utama.
    • Pindahkan variasi role/negara/entity ke environment, bukan folder.
    • Standarisasi flow dengan prefix dan pisahkan domain Organization, Tax, dan Compliance.
  • Hasil akhir yang diinginkan:
    • Collection lebih mudah dipahami untuk engineer baru, QA, dan auditor.
    • Perubahan endpoint cukup di satu tempat (domain), sementara behavior dibedakan lewat environment.
    • Selaras dengan pola enterprise yang kamu tulis di dokumen konsep (domainization, environmentization, flow mapping).