Yomu
Development

Setup Pengembangan

Panduan langkah demi langkah untuk pengembangan lokal dengan Docker Compose

Prasyarat

Install ini sebelum melanjutkan:

ToolCommandCek
Java 21brew install openjdk@21java -version
Rust 1.85+curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | shrustc --version
Node.js 22+brew install nodenode -v
DockerDocker Desktopdocker -v
buncurl -fsSL https://bun.sh/install | bashbun -v

Environment Variables

Setiap service memerlukan environment variables spesifik.

Java Backend (yomu-backend-java)

Buat .env di yomu-backend-java/:

# Database (Docker Compose)
DATABASE_URL=jdbc:postgresql://localhost:5432/yomu_local?user=yomu_user&password=yomu_pass

# Auth
JWT_SECRET=your-super-secret-jwt-key-change-in-production
INTERNAL_API_KEY=internal-api-key-for-rust-sync
RUST_ENGINE_BASE_URL=http://localhost:8081

# Google OAuth (optional)
GOOGLE_OAUTH_CLIENT_ID=your-client-id
GOOGLE_OAUTH_CLIENT_SECRET=your-client-secret

Rust Backend (yomu-backend-rust)

Buat .env di yomu-backend-rust/:

# Database
DATABASE_URL=postgres://yomu_user:yomu_pass@localhost:5432/yomu_local

# Redis
REDIS_URL=redis://localhost:6379

# Java backend (outbox sync)
JAVA_CORE_URL=http://localhost:8080
JAVA_CORE_API_KEY=internal-api-key-for-rust-sync

# Logging
RUST_LOG=info

Frontend (yomu-frontend)

Buat .env.local di yomu-frontend/:

# API URLs
CORE_API_BASE_URL=http://localhost:8080/api
RUST_ENGINE_URL=http://localhost:8081/api

# Auth
AUTH_COOKIE_SECURE=false
NEXT_PUBLIC_GOOGLE_CLIENT_ID=your-client-id

# Debug
NEXT_PUBLIC_DEBUG=true

Setup Langkah demi Langkah

Langkah 1: Clone dan Install Dependencies

# Clone repository (jika belum dilakukan)
# git clone https://github.com/yourorg/yomu.git

# Java backend
cd yomu-backend-java
./gradlew build

# Rust backend
cd ../yomu-backend-rust
cargo build

# Frontend
cd ../yomu-frontend
bun install

Langkah 2: Mulai Infrastructure (PostgreSQL + Redis)

Ketiga service menggunakan infrastruktur Docker Compose yang sama.

cd yomu-backend-rust
docker compose -f docker-compose.dev.yml build
docker compose -f docker-compose.dev.yml up -d

Verifikasi container berjalan:

docker compose -f docker-compose.dev.yml ps

Output yang diharapkan:

Name                    Command               State           Ports
--------------------------------------------------------------------------------------
yomu-postgres   docker-entrypoint.sh postgres   Up      0.0.0.0:5432->5432/tcp
yomu-redis      redis-server --appendonly ...   Up      0.0.0.0:6379->6379/tcp

Tunggu 5-10 detik agar PostgreSQL siap, lalu verifikasi konektivitas:

# Test PostgreSQL
psql -h localhost -U yomu_user -d yomu_local -c "SELECT 1"

# Test Redis
redis-cli -h localhost ping

Langkah 3: Jalankan Rust Migrations

cd yomu-backend-rust
cargo sqlx database create
cargo sqlx migrate run

Verifikasi:

cargo sqlx migrate status

Langkah 4: Mulai Java Backend

cd yomu-backend-java
./gradlew bootRun

Output yang diharapkan:

Started Application in X.XXX seconds

Verifikasi:

curl http://localhost:8080/health

Expected response:

{"success":true,"message":"OK","data":{"status":"UP"}}

Langkah 5: Mulai Rust Backend

cd yomu-backend-rust
cargo run

Output yang diharapkan:

Listening on http://0.0.0.0:8081

Verifikasi:

curl http://localhost:8081/health

Expected response:

{"success":true,"message":"OK","data":{}}

Langkah 6: Mulai Frontend

cd yomu-frontend
bun run dev

Output yang diharapkan:

Local:   http://localhost:3000

Verifikasi: Buka http://localhost:3000 di browser.


Docker Compose Quick Start

Jalankan semua service dengan satu perintah:

# Build semua images
cd yomu-backend-rust
docker compose -f docker-compose.dev.yml build

# Mulai semua services
docker compose -f docker-compose.dev.yml up -d

# Lihat logs
docker compose -f docker-compose.dev.yml logs -f

Testing Commands

Java Backend

cd yomu-backend-java

# Jalankan semua tests
./gradlew test

# Jalankan test class spesifik
./gradlew test --tests "yomu.auth.AuthenticationControllerTest"

# Jalankan dengan coverage
./gradlew test jacocoTestReport

Rust Backend

cd yomu-backend-rust

# Jalankan semua tests
cargo test

# Jalankan test module spesifik
cargo test --package gamification --lib modules::gamification::tests

# Jalankan dengan coverage (memerlukan grcov)
cargo tarpaulin

# Jalankan nextest (lebih lambat tapi parallel)
cargo nextest run

Frontend

cd yomu-frontend

# Build untuk produksi
bun run build

# Jalankan type check
bun run typecheck

# Jalankan lint (ESLint)
bun run lint

Masalah Umum dan Perbaikan

Masalah 1: Port Sudah Digunakan

Error: Cannot start service java: Bind failed for port 8080

Perbaikan:

# Temukan proses yang menggunakan port 8080
lsof -i :8080

# Hentikan
kill -9 <PID>

# Atau ubah port di docker-compose.dev.yml

Masalah 2: Error Migrasi SQLx Rust

error: configuration file not found

Perbaikan:

# Pastikan .sqlx/config.json ada
cd yomu-backend-rust
cargo sqlx migrate setup

Masalah 3: Frontend Tidak Bisa Terhubung ke BFF

Error: Network error while fetching /api/v1/...

Perbaikan:

# Pastikan variabel NEXT_PUBLIC_* sudah diatur dengan benar di .env.local
# Restart frontend setelah perubahan .env
bun run dev

Masalah 4: Koneksi PostgreSQL Ditolak

ERROR: database "yomu_local" is not accepting connections

Perbaikan:

# Tunggu PostgreSQL siap
sleep 10

# Atau periksa logs PostgreSQL
docker compose -f docker-compose.dev.yml logs postgres

Diagram Setup Pengembangan Lokal Lengkap


Development Cheat Sheet

TugasCommand
Mulai semua servicescd yomu-backend-rust && docker compose -f docker-compose.dev.yml up -d
Mulai Java backendcd yomu-backend-java && ./gradlew bootRun
Mulai Rust backendcd yomu-backend-rust && cargo run
Mulai frontendcd yomu-frontend && bun run dev
Jalankan Java testscd yomu-backend-java && ./gradlew test
Jalankan Rust testscd yomu-backend-rust && cargo test
Format Rustcd yomu-backend-rust && cargo fmt
Lint Rustcd yomu-backend-rust && cargo clippy
Build frontendcd yomu-frontend && bun run build

Langkah Selanjutnya

Setelah setup selesai:

  1. Keputusan Desain — Pelajari tentang Architecture dan pilihan teknologi
  2. Panduan Pengembangan — Gambaran umum pengembangan lokal
  3. API Reference — Endpoint API detail (segera hadir)

On this page