# 🧩 Watermill PostgreSQL Template Template ini adalah **boilerplate siap pakai** untuk membangun sistem **Publish / Subscribe (Event-driven)** menggunakan [Watermill](https://watermill.io) dan **PostgreSQL** sebagai backend message store. Cocok digunakan untuk: - Integrasi antar microservice (event-driven) - Streaming data dari sistem eksternal - Pengganti message broker seperti Kafka/RabbitMQ berbasis PostgreSQL - Middleware antar aplikasi HIS, klaim, billing, atau sistem logistik --- ## 🚀 Fitur Utama | Fitur | Keterangan | |-------|-------------| | ⚙️ **Watermill v1.3.x stable** | Versi stabil terbaru dengan dukungan PostgreSQL schema & offset adapter | | 🧱 **Auto-create table** | Semua tabel `watermill_` dan `watermill_offsets_` dibuat otomatis | | 🔧 **Konfigurasi lewat `.env`** | Semua koneksi & daftar topik diatur lewat environment variable | | 🧰 **Makefile command** | Jalankan, build, atau buat tabel hanya dengan 1 perintah | | 📡 **Contoh Publisher & Subscriber** | Sudah ada implementasi minimal yang langsung jalan | | 🐘 **PostgreSQL ready** | Menggunakan driver `lib/pq` yang kompatibel dengan Watermill-SQL | --- ## 📁 Struktur Folder ```text watermill-template/ ├── cmd/ │ └── main.go # Entry point aplikasi ├── internal/ │ ├── config/ # Loader file .env │ ├── db/ # Koneksi ke PostgreSQL │ └── pubsub/ # Implementasi Watermill (publisher, subscriber, table helper) ├── .env.example # Contoh konfigurasi environment ├── Makefile # Shortcut command untuk run, build, create-table ├── go.mod # Modul Go ├── go.sum # Dependency checksum └── README.md # Dokumentasi proyek ``` ## ⚙️ Setup Langkah Demi Langkah ### 1️⃣ Clone Repository & Install Dependency ```bash git clone https://github.com/yourname/watermill-template.git cd watermill-template go mod tidy cp .env.example .env # PostgreSQL Connection DB_HOST=localhost DB_PORT=5432 DB_USER=postgres DB_PASSWORD=postgres DB_NAME=middleware DB_SSLMODE=disable # Watermill Topics (comma separated) WATERMILL_TOPICS=mdw_close_bill,mdw_claim_request,mdw_kd_inacbg,mdw_berkas # Logger LOG_DEBUG=false