Skip to main content

Internal Flow Diagrams

Dokumentasi flow diagram internal untuk developer reference. Fokus pada validasi, delegasi, dan alur eksekusi di code level.
πŸ’‘ Working with Flow Diagrams:
  • Zoom: Cmd/Ctrl + Scroll atau klik kanan β†’ β€œOpen Image in New Tab”
  • Download: Copy code diagram β†’ paste ke Mermaid Live Editor β†’ Download PNG/SVG
  • Full Guide: Lihat Mermaid Guide untuk tutorial lengkap

🎯 Transaction Create Flow

Handler: TransactionHandler.CreateTransaction

Lokasi: internal/domains/transaction/transaction_handler.go Diagram alir eksekusi handler ketika menerima request pembuatan transaksi.

Rincian Langkah

[Tracing] Inisialisasi tracer handler untuk observabilitas
  • Setup OpenTelemetry span
  • Add handler layer attributes
[Auth] utils_jwt.GetUserSession(ctx)
  • Jika gagal: mapping ke 401 melalui utils_error.CatchAuthError
  • Jika sukses: set payload.IDUserApps = session.Sub
[Parse Body] utils_payload.BodyParser(ctx, &payload, ...)
  • Jika gagal: return error parser (HTTP status sesuai CatchHandlerErrorV1)
[Validasi Wajib]
  • branch_code tidak boleh kosong β†’ 400
  • items minimal 1 β†’ 400
[Validasi Item] per item:
  • Izinkan bundle: product_id boleh 0 jika bundle_id diisi
  • quantity wajib > 0
[Validasi Addon] per addon:
  • addon_id wajib > 0
  • quantity wajib > 0
[Delegasi Service] transactionService.CreateTransaction(ctx, payload)
  • Jika error: gunakan utils_error.CatchHandlerErrorV1 untuk response terstruktur
  • Jika sukses: utils_response.Result(ctx, trx, nil)

Input & Output

Input: JSON body PayloadCreateTransaction + header Authorization (JWT)
{
  "branch_code": "BRN-MST-OSK00001",
  "items": [
    {
      "product_id": 1238,
      "quantity": 2,
      "addons": [
        {
          "addon_id": 10,
          "quantity": 1
        }
      ]
    }
  ]
}
Output Berhasil: 200 OK dengan objek transaksi
{
  "code": 200,
  "data": {
    "id": 185,
    "transaction_code": "TRX-MC01-BRN-MST-OSK00001-251013-5UJW",
    "grand_total": 33000,
    "status": "paid"
  }
}
Output Gagal: 4xx/5xx tergantung jenis kesalahan
{
  "code": 400,
  "message": "branch_code wajib diisi"
}

Catatan Integrasi

  • Handler ini fokus validasi request & delegasi
  • Harga, stok, bundle, dan logika atomic berada di service/repository
  • Tracing/telemetri mengikuti standar OTEL util di project
  • Error handling menggunakan utils_error.CatchHandlerErrorV1

πŸ”„ Service Layer Flow

Service: transactionService.CreateTransaction

Lokasi: internal/domains/transaction/transaction_service.go

πŸ“Š Repository Layer Flow

Repository: transactionRepository.Create

Lokasi: internal/domains/transaction/transaction_repository.go

πŸ” Authentication Flow

JWT Validation Flow


πŸ“¦ Inventory Movement Flow

Stock Consumption Flow


πŸ’³ Payment Processing Flow

QRIS Payment Flow


πŸ”„ Offline Sync Flow

Batch Sync Flow


🎨 Best Practices

DO βœ…

  • Always setup tracing di awal handler
  • Validate input sebelum delegasi ke service
  • Use DB transaction untuk atomic operations
  • Handle errors dengan proper HTTP status codes
  • Log important steps dengan correlation ID

DON’T ❌

  • Jangan skip validation di handler layer
  • Jangan hardcode business logic di handler
  • Jangan commit transaction sebelum semua steps sukses
  • Jangan expose internal error messages ke client
  • Jangan skip tracing/logging

Transaction Flow

High-level transaction flow & state machine

System Design

Overall system architecture

Database ERD

Database schema & relationships

Developer Reference: Dokumentasi ini untuk internal development reference. Untuk user-facing documentation, lihat Features section.