
Sportvenue API
Detail Proyek
SportVenue Hub — Multi-Court Sports Venue Management & Real-Time Booking Platform
SportVenue Hub adalah platform manajemen dan pemesanan venue olahraga berbasis web dan API yang dirancang untuk mengelola operasional multi-lapangan (futsal, badminton, basket), jadwal pelatih (coach clinic), pendaftaran turnamen event, hingga sesi main bareng (open match). Sistem ini menjamin tidak ada jadwal yang bertabrakan (zero double-booking), mengintegrasikan pembayaran otomatis melalui payment gateway, serta memproses antrian email dan pembatalan otomatis di latar belakang.
Saya membangun sistem ini sebagai Backend Engineer, merancang arsitektur aplikasi berlapis di Laravel 11, membuat sistem penguncian ketersediaan lapangan secara atomik, mengintegrasikan verifikasi pembayaran otomatis Midtrans, serta mengelola deployment berbasis Docker.
Ringkasan Proyek
- Kategori: RESTful API / Backend Platform
- Peran: Backend Engineer
- Backend Framework: Laravel 11, PHP 8.3
- Containerization & Web Server: Docker Compose, Nginx, PHP-FPM
- Database: PostgreSQL 15, Eloquent ORM, Database Migrations & Seeders
- In-Memory & Antrean (Queue): Redis 7 (Asynchronous Queue Worker, Cache, Token Blacklist)
- Payment Gateway: Midtrans Snap API (QRIS, Virtual Account, E-Wallet) dengan Rekonsiliasi Webhook SHA-512
- Autentikasi & Keamanan: JWT (JSON Web Token), Role-Based Access Control (RBAC:
ADMIN,COACH,USER), Rate Limiting - Dokumentasi & Testing: OpenAPI 3.0 / Swagger UI, PHPUnit Automated Testing (100% Pass)
Latar Belakang
Pemesanan lapangan olahraga secara konvensional sering menimbulkan masalah operasional bagi pengelola dan pelanggan. Masalah yang umum terjadi antara lain jadwal bentrok akibat dua pemesan memilih jam yang sama, proses verifikasi transfer manual yang memakan waktu, lapangan yang tertahan karena pemesan tidak kunjung membayar, hingga sulitnya melacak laporan pendapatan harian secara akurat.
SportVenue Hub dibangun untuk mendigitalkan dan mengotomatiskan seluruh alur operasional tersebut dari hulu ke hilir.
Melalui platform ini, pelanggan dapat:
- Melihat profil venue, fasilitas lapangan, galeri foto, dan ulasan secara transparan.
- Mengecek ketersediaan jadwal slot jam lapangan secara langsung tanpa perlu konfirmasi manual via chat.
- Melakukan pemesanan lapangan, pendaftaran event olahraga, atau booking sesi latihan bersama coach bersertifikat.
- Mengikuti sesi Open Match (Main Bareng) dengan sistem bagi biaya (split-bill) otomatis per orang.
- Membayar secara instan menggunakan QRIS, Transfer Bank, atau E-Wallet melalui Midtrans Snap.
- Menerima tiket digital, kode booking, dan bukti pembayaran (Invoice) resmi langsung ke email.
- Mendapatkan email pengingat (Reminder H-1) sebelum jadwal bermain dimulai.
Di sisi pengelola (Admin), platform menyediakan Dashboard Manajemen untuk memantau ringkasan pendapatan harian/mingguan/bulanan, melihat tingkat keterisian (occupancy rate) dan jam-jam sibuk (peak hours), mengatur harga sewa reguler vs prime-time, memblokir slot untuk pemeliharaan, serta mengekspor data transaksi ke format CSV.
Kontribusi Saya
1. Keamanan Autentikasi & Pembagian Hak Akses (JWT & RBAC)
- Membangun sistem otentikasi stateless menggunakan JWT (JSON Web Token) dengan pengelolaan access token dan refresh token.
- Menerapkan Role-Based Access Control (RBAC) dengan middleware khusus untuk membatasi hak akses antara
ADMIN,COACH, danUSER. - Mengamankan jalur API dari serangan brute-force dengan menerapkan pembatasan laju permintaan (Rate Limiting & Login Throttling).
- Menyediakan fitur pengelolaan profil pengguna, penggantian kata sandi yang aman, serta unggah foto profil (avatar).
2. Mesin Booking Lapangan & Pencegahan Jadwal Bentrok (Anti Double-Booking)
- Merancang alur pemesanan lapangan multi-slot dengan validasi ketersediaan langsung di tingkat database.
- Menerapkan mekanisme penguncian data (Pessimistic Locking) saat transaksi pemesanan diproses untuk mencegah dua pemesan mengamankan slot jam yang sama secara bersamaan (0% collision rate).
- Memberikan batas waktu pembayaran otomatis (15 menit) sejak pesanan dibuat agar slot tidak tertahan tanpa kejelasan.
3. Integrasi Payment Gateway & Rekonsiliasi Otomatis (Midtrans)
- Mengintegrasikan Midtrans Snap API sehingga pelanggan dapat memilih berbagai metode pembayaran digital (QRIS, VA Bank BCA/Mandiri/BRI, Gopay, ShopeePay).
- Membangun endpoint penampung webhook Midtrans dengan verifikasi tanda tangan digital keamanan tinggi berbasis hash SHA-512.
- Menerapkan prinsip Idempotency Guard untuk memastikan panggilan webhook yang berulang tidak menyebabkan duplikasi data pesanan atau invoice ganda.
- Menerbitkan nomor invoice resmi unik (
INV-YYYYMMDD-XXXXX) secara otomatis begitu pembayaran sukses diverifikasi.
4. Pemrosesan Latar Belakang & Sistem Notifikasi Email (Redis Queue)
- Mengalihkan proses pengiriman email konfirmasi, invoice pembayaran, dan tiket digital ke antrian asynchronous Redis (mail queue) agar respon API tetap instan dalam hitungan milidetik.
- Menyiapkan pekerja latar belakang (Queue Worker) di Docker dengan fitur percobaan ulang otomatis (auto-retry) hingga 3 kali jika server email eksternal mengalami kendala.
- Merancang template email HTML yang responsif dan rapi untuk konfirmasi booking, bukti pembayaran, dan pengingat jadwal.
5. Penjadwal Otomatis (Cron Schedulers)
- Membangun tugas terjadwal (Scheduled Cron) yang berjalan setiap 1 menit untuk mendeteksi pesanan yang melewati batas waktu pembayaran, otomatis membatalkan booking yang kedaluwarsa, dan merilis kembali slot lapangan agar dapat dipesan pelanggan lain.
- Membangun penjadwal harian yang berjalan setiap pukul 07:00 pagi untuk menyaring jadwal bermain esok hari dan mengirimkan email pengingat (Reminder H-1) kepada seluruh pelanggan terkait.
- Menutup pendaftaran event olahraga secara otomatis saat batas tanggal registrasi telah terlampaui.
6. Modul Komunitas Open Match (Mabar) & Coach Clinic
- Mengembangkan fitur Open Match yang memungkinkan pengguna membuat sesi main bareng, mengatur kuota pemain, dan membagi biaya sewa lapangan secara otomatis ke setiap peserta yang bergabung.
- Membangun modul jadwal ketersediaan pelatih (Coach Schedules) yang memudahkan pelanggan memesan sesi pelatihan privat sesuai jam luang pelatih.
7. Dashboard Analitik Admin & Ekspor Laporan
- Membangun API ringkasan statistik harian yang menampilkan total booking, perolehan omzet, jumlah pengguna baru, dan grafik pendapatan 7 hari terakhir.
- Menyusun laporan keterisian lapangan (Occupancy Report) yang menghitung persentase penggunaan tiap lapangan serta memetakan jam-jam paling ramai (peak hours).
- Menyediakan fitur ekspor data riwayat transaksi dan booking ke format CSV dengan metode streaming untuk menjaga efisiensi memori server saat menangani data dalam jumlah besar.
8. Dokumentasi API Interaktif & Jaminan Kualitas (Automated Testing)
- Menyusun dokumentasi OpenAPI 3.0 / Swagger UI interaktif sehingga seluruh endpoint dapat dipelajari, dibaca parameternya, dan diuji langsung melalui browser.
- Menulis rangkaian pengujian otomatis (Unit & Feature Tests) menggunakan PHPUnit yang mencakup seluruh alur utama (autentikasi, pemesanan anti-bentrok, webhook pembayaran, scheduler, dan laporan admin) dengan status kelulusan 100%.
Fitur Produk
- Public Venue Discovery — Eksplorasi profil venue, foto fasilitas, daftar lapangan, dan ulasan pelanggan.
- Live Slot Availability Matrix — Pengecekan status ketersediaan jam lapangan secara langsung per tanggal.
- Instant Court Booking — Pemesanan lapangan dengan sistem penguncian jadwal anti-ganda.
- Midtrans Snap Checkout — Pembayaran instan via QRIS, Virtual Account, dan E-Wallet.
- Automated Invoice & E-Receipt — Penerbitan bukti bayar dan nomor invoice otomatis.
- Open Match (Main Bareng) — Fitur cari teman bermain olahraga dengan pembagian biaya sewa otomatis.
- Coach Clinic Reservation — Reservasi sesi latihan privat bersama pelatih profesional.
- Event & Tournament Registration — Pendaftaran turnamen olahraga dengan kuota peserta terkontrol.
- Auto-Release Expired Slots — Pembatalan otomatis pesanan yang tidak dibayar dan pelepasan slot ke publik.
- H-1 Schedule Reminder — Pengiriman email pengingat jadwal bermain secara otomatis setiap pagi.
- Admin Command & Analytics — Laporan grafik omzet harian, tingkat okupansi lapangan, dan jam sibuk.
- Interactive Swagger Documentation — Portal uji coba dan dokumentasi API interaktif.
Teknologi & Arsitektur (Tech Stack)
- Backend: Laravel 11, PHP 8.3
- Containerization: Docker Compose (PHP-FPM, Nginx, PostgreSQL, Redis, Queue Worker)
- Database: PostgreSQL 15
- In-Memory Cache & Queue Driver: Redis 7
- Payment Gateway: Midtrans Snap API & Webhooks
- Security & Auth:
php-open-source-saver/jwt-auth, Role-Based Access Control, SHA-512 Verification - Documentation: OpenAPI 3.0 / Swagger UI (
darkaonline/l5-swagger) - Testing Suite: PHPUnit (100% Pass)
Tantangan Teknis & Solusi
1. Mencegah Pemesanan Ganda (Double Booking) saat Pengunjung Bersamaan
Tantangan: Jika dua pengguna memilih lapangan dan jam yang sama di detik yang persis sama, ada risiko kedua pesanan tersebut sama-sama tersimpan di database, menyebabkan satu lapangan dipesan oleh dua orang berbeda.
Solusi: Menerapkan penguncian baris data di database PostgreSQL (Pessimistic Lock / SELECT ... FOR UPDATE) di dalam blok transaksi database. Pengguna pertama yang tiba akan mengunci status slot, sementara permintaan kedua langsung ditolak dengan pesan bahwa slot sudah tidak tersedia (0% collision rate).
2. Menjaga Keamanan & Konsistensi Status Pembayaran Webhook
Tantangan: Notifikasi pembayaran dari payment gateway rentan terhadap pemalsuan (spoofing) dari pihak luar, serta pengiriman notifikasi berulang (repeated delivery) dari server gateway yang dapat memicu perubahan data ganda.
Solusi: Setiap payload webhook diverifikasi menggunakan kalkulasi hash digital SHA-512 dengan menggabungkan ID pesanan, kode status, total bayar, dan Server Key rahasia. Sistem juga dilengkapi idempotency check di mana notifikasi yang sudah berstatus lunas tidak akan diproses ulang.
3. Mencegah Penahanan Slot Lapangan oleh Pemesan yang Tidak Membayar
Tantangan: Lapangan yang telah dipilih pelanggan akan berstatus Pending. Jika pelanggan membatalkan niatnya tanpa membayar, lapangan tersebut bisa menggantung dan tidak bisa dipesan oleh pelanggan lain.
Solusi: Menetapkan masa berlaku pembayaran selama 15 menit dan menjalankan tugas terjadwal (Cron Job) setiap 1 menit. Sistem akan secara otomatis mencari pesanan yang kedaluwarsa, mengubah statusnya menjadi Expired, dan mengembalikan slot lapangan menjadi Available untuk umum.
4. Menghindari Respons Aplikasi Lambat Akibat Pengiriman Email
Tantangan: Proses pengiriman email bukti pembayaran dan invoice melalui server SMTP eksternal membutuhkan waktu 1–3 detik. Menunggu proses ini selesai sebelum merespon pengguna akan membuat aplikasi terasa lambat.
Solusi: Menggunakan antrian pesan Redis (Redis Queue). API langsung merespon pengguna dalam hitungan milidetik setelah data tersimpan, sementara pengiriman email diserahkan kepada Queue Worker yang bekerja di latar belakang secara mandiri.
Pembelajaran & Poin Kunci
- Merancang arsitektur backend Laravel yang modular, bersih, dan mudah dikembangkan menggunakan pola Layered Architecture (Controllers, Services, Repositories, DTOs).
- Menguasai teknik pencegahan benturan data transaksi (race condition) pada sistem pemesanan menggunakan penguncian database atomik.
- Mengintegrasikan alur pembayaran digital modern secara aman dan idempoten dengan verifikasi tanda tangan kriptografi.
- Mengoptimalkan performa aplikasi dengan mendelegasikan tugas berat (email dan rekonsiliasi) ke sistem antrian latar belakang (background workers).
- Menyusun dokumentasi API dan pengujian otomatis yang komprehensif untuk memastikan keandalan sistem jangka panjang.
Spesifikasi Proyek
Ingin Proyek Serupa?
Tim ahli kami siap membantu Anda merealisasikan inovasi sistem software terbaik.
Project Showcase
3 Tangkapan Layar



Proyek Lainnya
Jelajahi karya rekayasa perangkat lunak lainnya.

Koperasi Sedia
Cooperative core banking platform: automated savings, flat & annuity loans, daily cash register, proportional dividend allocation, and print-ready legal loan agreements.

SupportSense AI
Autonomous enterprise AI customer support engine fusing Hybrid RAG + KAG (PostgreSQL & ChromaDB) for zero-hallucination order tracking and cost-efficient sub-second routing.

Bizinsight AI
BizInsight AI adalah sistem Multi-Agent yang mengubah pertanyaan bisnis sehari-hari menjadi query database, grafik interaktif, dan wawasan bisnis otomatis tanpa perlu paham SQL.