| Nama | NRP | Role |
|---|---|---|
| Muhammad Budhi Salmanjannah | 5025201084 | Frontend |
| Ainun Nadhifah Syamsiyah | 5025221053 | Backend |
| Fawwas Aldy Nurramdhan Kaisar | 5025221179 | Backend |
| Muammar Bahalwan | 5053231020 | Frontend |
Aplikasi sistem pemesanan makanan untuk restoran dine-in dirancang untuk meningkatkan efisiensi layanan dan kenyamanan pelanggan. Melalui pemindaian QR code di meja, pelanggan dapat langsung mengakses menu digital, memilih makanan berdasarkan ketersediaan dan kategori, serta melakukan pembayaran tanpa perlu menunggu pelayan. Sistem ini juga mendukung alur kerja dapur dan pelayan dengan fitur pelacakan pesanan secara real-time dan pengelolaan antrian pesanan.
Tujuan utama dari sistem ini adalah menyediakan pengalaman pemesanan yang cepat, akurat, dan terintegrasi antar peran pengguna seperti pelanggan, staf dapur, dan pelayan. Arsitektur perangkat lunak yang dibangun harus mengutamakan keandalan, skalabilitas, dan kemudahan penggunaan, dengan harapan dapat mempercepat proses layanan, mengurangi kesalahan operasional, dan meningkatkan kepuasan semua pihak yang terlibat.
Laporan selengkapnya dapat dilihat di sini.
Proyek ini mengikuti prinsip Clean Architecture dengan pemisahan tanggung jawab yang jelas:
gacoan-backend/
βββ application/ # Lapisan aplikasi (layanan, permintaan, respons)
βββ domain/ # Lapisan domain (entitas, logika bisnis)
βββ infrastructure/ # Lapisan infrastruktur (database, layanan eksternal)
βββ presentation/ # Lapisan presentasi (controller, rute, middleware)
βββ platform/ # Utilitas platform bersama
βββ command/ # Perintah CLI
βββ test/ # Suite pengujian komprehensif
- Domain-Driven Design (DDD)
- Repository Pattern
- Dependency Injection
- Middleware Pattern
- Factory Pattern
- Autentikasi berbasis JWT
- Kontrol akses berbasis peran (RBAC)
- Berbagai peran pengguna: Pelanggan, Dapur, Pelayan, Super Admin
- Manajemen siklus hidup pesanan lengkap
- Pelacakan status pesanan real-time
- Manajemen antrian dengan kode antrian unik
- Riwayat pesanan dan pagination
- Mulai Memasak: Memulai persiapan makanan
- Selesai Memasak: Menandai pesanan siap disajikan
- Pesanan Berikutnya: Mendapatkan pesanan berikutnya dalam antrian
- Pelacakan waktu memasak dan deteksi keterlambatan
- Siap Disajikan: Melihat pesanan siap untuk pengiriman
- Mulai Mengantar: Memulai pengiriman makanan
- Selesai Mengantar: Menyelesaikan pengiriman pesanan
- Pembaruan status pesanan real-time
- Integrasi gateway pembayaran Midtrans
- Pelacakan status pembayaran
- Penanganan webhook untuk pembaruan pembayaran
- Pemrosesan transaksi yang aman
- Organisasi menu berbasis kategori
- Manajemen ketersediaan menu
- Manajemen harga dengan presisi desimal
- Operasi CRUD item menu
- Manajemen meja
- Manajemen pengguna
- Riwayat transaksi
- Pelaporan komprehensif
- Bahasa: Go 1.24
- Framework: Gin (framework web HTTP)
- Database: PostgreSQL dengan GORM
- Autentikasi: JWT
- Gateway Pembayaran: Midtrans
- Pengujian: Testify
- Validasi: Validasi domain kustom
- Penanganan Desimal: ShopSpring Decimal
- Go 1.24 atau lebih tinggi
- PostgreSQL 12 atau lebih tinggi
- Git
git clone https://github.com/ainunns/gacoan-backend.git
cd gacoan-backendgo mod downloadSalin dan isi file .env.example menjadi .env di direktori root:
cp .env.example .env# Jalankan migrasi database
go run main.go --migrate
# Seed data awal
go run main.go --seedgo run main.goServer akan berjalan di http://localhost:8888
go test ./test/... -vgo test ./test/start_delivering_test.go -vgo test ./test/ -run TestStartDelivering_Success -vgo test ./test/... -coverhttp://localhost:8888/api
Dokumentasi API dapat dilihat di sini.
Semua endpoint yang dilindungi memerlukan token JWT di header Authorization:
Authorization: Bearer <your_jwt_token>
POST /user/register- Registrasi penggunaPOST /user/login- Login pengguna
POST /transaction/- Buat transaksi baruGET /transaction/- Dapatkan semua transaksi (dengan pagination)GET /transaction/:id- Dapatkan transaksi berdasarkan IDPOST /transaction/hook- Webhook pembayaran
GET /transaction/next-order- Dapatkan pesanan berikutnya dalam antrianPOST /transaction/start-cooking- Mulai memasak pesananPOST /transaction/finish-cooking- Selesai memasak pesanan
GET /transaction/ready-to-serve- Dapatkan pesanan siap disajikanPOST /transaction/start-delivering- Mulai mengantar pesananPOST /transaction/finish-delivering- Selesai mengantar pesanan
GET /menu/- Dapatkan semua menuPOST /menu/- Buat item menu baruPUT /menu/:id/availability- Perbarui ketersediaan menu
GET /table/- Dapatkan semua mejaGET /category/- Dapatkan semua kategoriGET /user/- Dapatkan semua pengguna
- Membuat transaksi
- Melihat riwayat transaksi sendiri
- Melakukan pembayaran
- Melihat pesanan berikutnya dalam antrian
- Mulai/selesai memasak pesanan
- Melihat detail pesanan
- Melihat pesanan siap disajikan
- Mulai/selesai mengantar pesanan
- Memperbarui status pesanan
Pending β Preparing β Ready to Serve β Delivering β Served
β β β β β
Pelanggan Dapur Dapur Pelayan Pelayan
Membuat Mulai Selesai Mulai Selesai
Pesanan Memasak Memasak Mengantar Mengantar
βββ application/
β βββ request/ # DTO Permintaan
β βββ response/ # DTO Respons
β βββ service/ # Layanan aplikasi
βββ domain/
β βββ identity/ # Objek nilai ID
β βββ menu/ # Domain menu
β βββ order/ # Domain pesanan
β βββ shared/ # Objek domain bersama
β βββ table/ # Domain meja
β βββ transaction/ # Domain transaksi
β βββ user/ # Domain pengguna
βββ infrastructure/
β βββ adapter/ # Adapter layanan eksternal
β βββ database/ # Lapisan database
β βββ validation/ # Validasi database
βββ presentation/
β βββ controller/ # Controller HTTP
β βββ middleware/ # Middleware HTTP
β βββ route/ # Definisi rute
β βββ message/ # Pesan error
βββ test/ # File pengujian
- Set
APP_ENV=productiondi variabel environment - Konfigurasi database produksi
- Atur secret JWT yang tepat
- Konfigurasi kunci produksi Midtrans
- Atur reverse proxy (nginx/apache)
- Gunakan process manager (systemd/pm2)
Repository frontend dapat dilihat di sini.