RESTful API yang robust dan scalable untuk ekosistem KampusMeal - Platform pemesanan makanan kampus yang modern.
Backend KampusMeal adalah RESTful API berbasis NestJS yang menjadi backbone dari ekosistem KampusMeal. API ini dirancang untuk menghubungkan tiga jenis pengguna utama: Mahasiswa, Pemilik Warung, dan Admin, dengan menyediakan berbagai endpoint untuk autentikasi, manajemen menu, pemesanan, ulasan, dan pembayaran.
Dengan arsitektur modular dan scalable, backend ini menggunakan Firebase Firestore sebagai database NoSQL dan Firebase Storage untuk penyimpanan file (foto menu, profil warung, dll). API ini dibangun dengan fokus pada keamanan, performa, dan developer experience yang baik.
API ini menyediakan berbagai fitur untuk mendukung operasional platform KampusMeal:
- π Authentication & Authorization: Sistem autentikasi berbasis Firebase dengan role-based access control (Student, Stall Owner, Admin).
- πͺ Manajemen Warung (Stalls): CRUD operasi untuk data warung, termasuk profil, jam operasional, dan foto.
- π Manajemen Menu: Endpoint untuk mengelola menu makanan, kategori, harga, dan ketersediaan stok.
- π Keranjang Belanja (Cart): Sistem keranjang belanja untuk mahasiswa dengan validasi stok real-time.
- π¦ Manajemen Pesanan (Orders): Proses pemesanan lengkap dari checkout hingga status pengiriman (pending, processing, ready, completed, cancelled).
- β Ulasan & Rating: Sistem review dan rating untuk warung dan menu makanan.
- π Notifikasi Real-time: Integrasi dengan Firebase Cloud Messaging (FCM) untuk notifikasi pesanan (coming soon).
- π Dashboard Analytics: Endpoint untuk statistik penjualan dan performa warung (coming soon).
- π Search & Filter: Pencarian dan filter menu berdasarkan kategori, harga, dan rating.
- π± Mobile-First API Design: Response format yang optimal untuk aplikasi mobile.
Project ini dibangun menggunakan teknologi modern untuk memastikan performa optimal dan maintainability yang baik.
| Kategori | Teknologi | Deskripsi |
|---|---|---|
| Core Framework | NestJS 11 | Framework Node.js progressive untuk membangun API yang scalable. |
| Language | TypeScript 5.7 | JavaScript dengan tipe data statis untuk kode yang lebih aman. |
| Database | Firebase Firestore | NoSQL cloud database yang scalable dan real-time. |
| Storage | Firebase Storage | Cloud storage untuk menyimpan gambar menu dan profil warung. |
| Authentication | Firebase Admin SDK | Autentikasi dan otorisasi berbasis Firebase. |
| Validation | Class Validator & Zod | Validasi input dan skema data. |
| Code Quality | ESLint & Prettier | Menjaga konsistensi dan kualitas kode. |
| Git Hooks | Husky | Menjalankan script otomatis sebelum commit. |
| Commit Convention | Commitlint | Memastikan commit message mengikuti conventional commits. |
| Testing | Jest & Supertest | Unit testing dan E2E testing. |
Ikuti langkah-langkah berikut untuk menjalankan project ini di komputer lokal Anda:
Pastikan Anda sudah menginstal:
- Node.js (Versi LTS disarankan, min v18+)
- pnpm (Package manager yang direkomendasikan)
- Firebase CLI (Opsional, untuk emulator)
git clone https://github.com/KampusMeal/kampusmeal-backend.git
cd kampusmeal-backendInstall semua dependencies menggunakan pnpm:
pnpm installBuat file .env di root project dan tambahkan konfigurasi berikut:
# Firebase Configuration
FIREBASE_PROJECT_ID=your-project-id
FIREBASE_PRIVATE_KEY="your-private-key"
FIREBASE_CLIENT_EMAIL=your-client-email
# Application
PORT=3000
NODE_ENV=developmentCatatan: Untuk mendapatkan kredensial Firebase, download Service Account Key dari Firebase Console β Project Settings β Service Accounts.
Mulai server dalam mode development (auto-reload):
pnpm run start:devServer akan berjalan di http://localhost:3000
Gunakan Postman Collection yang tersedia di folder docs/postman/ untuk testing endpoint:
- Import file
kampus-meal.postman_collection.json - Pilih environment:
kampus-meal-development.postman_environment.json
Struktur folder mengikuti best practice NestJS modular architecture:
src/
βββ auth/ # Modul Autentikasi & Autorisasi
β βββ decorators/ # Custom decorators (CurrentUser, Roles)
β βββ guards/ # Guards untuk proteksi route
β βββ dto/ # Data Transfer Objects
β βββ entities/ # Entity untuk user profile
βββ stalls/ # Modul Manajemen Warung
βββ menu-items/ # Modul Manajemen Menu
βββ cart/ # Modul Keranjang Belanja
βββ orders/ # Modul Pemesanan
βββ reviews/ # Modul Ulasan & Rating
βββ firebase/ # Modul Firebase Service
βββ common/ # Shared utilities & helpers
β βββ decorators/ # Custom decorators
β βββ filters/ # Exception filters
β βββ guards/ # Shared guards
β βββ helpers/ # Helper functions
β βββ interfaces/ # Shared interfaces
β βββ pipes/ # Validation pipes
βββ app.module.ts # Root module
βββ main.ts # Entry point aplikasi
# Development
pnpm run start # Start server (normal)
pnpm run start:dev # Start dengan auto-reload (watch mode)
pnpm run start:debug # Start dengan debugger
# Production
pnpm run build # Build project untuk production
pnpm run start:prod # Jalankan production build
# Code Quality
pnpm run lint # Jalankan ESLint
pnpm run format # Format code dengan Prettier
# Testing
pnpm run test # Run unit tests
pnpm run test:watch # Run tests dalam watch mode
pnpm run test:cov # Run tests dengan coverage report
pnpm run test:e2e # Run end-to-end testsAPI menggunakan Firebase Authentication dengan Bearer Token. Setiap request ke endpoint yang dilindungi harus menyertakan header:
Authorization: Bearer <firebase-id-token>
Terdapat 3 role utama:
| Role | Deskripsi | Access Level |
|---|---|---|
| Student | Mahasiswa yang memesan makanan | Cart, Orders, Reviews |
| StallOwner | Pemilik warung yang mengelola menu | Stalls, Menu Items, Orders (own) |
| Admin | Administrator dengan akses penuh | All endpoints (full access) |
POST /auth/register- Registrasi user baruPOST /auth/login- Login userGET /auth/profile- Ambil profil user (protected)PATCH /auth/profile- Update profil user (protected)
GET /stalls- List semua warungGET /stalls/:id- Detail warungPOST /stalls- Buat warung baru (StallOwner/Admin)PATCH /stalls/:id- Update warung (StallOwner/Admin)DELETE /stalls/:id- Hapus warung (Admin)
GET /menu-items- List semua menuGET /menu-items/:id- Detail menuPOST /menu-items- Tambah menu baru (StallOwner/Admin)PATCH /menu-items/:id- Update menu (StallOwner/Admin)DELETE /menu-items/:id- Hapus menu (StallOwner/Admin)
GET /cart- Lihat keranjang (Student)POST /cart- Tambah item ke keranjang (Student)PATCH /cart/:itemId- Update quantity (Student)DELETE /cart/:itemId- Hapus item dari keranjang (Student)
POST /orders/checkout- Checkout keranjang (Student)GET /orders- List pesanan user (Student/StallOwner)GET /orders/:id- Detail pesananPATCH /orders/:id/status- Update status pesanan (StallOwner/Admin)PATCH /orders/:id/reject- Tolak pesanan (StallOwner/Admin)
POST /reviews- Tambah review (Student)GET /reviews/stall/:stallId- Review untuk warung tertentuGET /reviews/menu/:menuId- Review untuk menu tertentu
Project ini dilengkapi dengan unit tests dan E2E tests menggunakan Jest:
# Run all tests
pnpm test
# Run dengan coverage report
pnpm run test:cov
# Run E2E tests
pnpm run test:e2e# Build project
pnpm run build
# Jalankan production server
pnpm run start:prodPastikan semua environment variables sudah di-set dengan benar di production environment:
NODE_ENV=productionPORT=3000(atau sesuai kebutuhan)- Firebase credentials (FIREBASE_PROJECT_ID, FIREBASE_PRIVATE_KEY, FIREBASE_CLIENT_EMAIL)
- Railway (Recommended) - Easy deployment dengan Git integration
- Google Cloud Run - Serverless container platform
- Heroku - Platform as a Service (PaaS)
- DigitalOcean App Platform - Managed platform
Dokumentasi lengkap tersedia di folder docs/:
- Firestore Schema:
docs/firebase/firestore-schema.md - Firestore Rules:
docs/firebase/firestore.rules - Storage Rules:
docs/firebase/storage.rules - Postman Collection:
docs/postman/kampus-meal.postman_collection.json
Project ini dikembangkan untuk keperluan Tugas Akhir / Product Development KampusMeal. Kontribusi terbatas pada tim pengembang yang berwenang.
-
Pastikan branch Anda up-to-date dengan
devbranch. -
Buat branch baru untuk fitur:
git checkout -b feature/nama-fitur -
Commit dengan Conventional Commits:
git commit -m "feat: add order notification feature" -
Push dan buat Pull Request ke
devbranch. -
Pastikan tidak ada linting error dan semua tests pass.
feat: menambahkan fitur baru
fix: memperbaiki bug
docs: update dokumentasi
style: perubahan formatting kode
refactor: refactoring kode
test: menambah atau update tests
chore: update dependencies atau config
Untuk pertanyaan atau bantuan terkait project ini, silakan hubungi:
- Repository: github.com/KampusMeal/kampusmeal-backend
- Issues: Buat issue di GitHub repository
Project ini bersifat UNLICENSED dan dikembangkan untuk keperluan akademis (Tugas Akhir).
Β© 2025 KampusMeal Team. All rights reserved.
Dibuat dengan β€οΈ oleh Tim KampusMeal