Skip to content

KampusMeal/kampusmeal-backend

Repository files navigation

🍽️ Backend API - KampusMeal

KampusMeal Banner

RESTful API yang robust dan scalable untuk ekosistem KampusMeal - Platform pemesanan makanan kampus yang modern.

NestJS TypeScript Firebase Node.js Status


πŸ“– Tentang Project

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.

✨ Fitur Utama

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.

πŸ› οΈ Teknologi (Tech Stack)

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.

πŸš€ Cara Menjalankan (Local Development)

Ikuti langkah-langkah berikut untuk menjalankan project ini di komputer lokal Anda:

1. Prasyarat

Pastikan Anda sudah menginstal:

  • Node.js (Versi LTS disarankan, min v18+)
  • pnpm (Package manager yang direkomendasikan)
  • Firebase CLI (Opsional, untuk emulator)

2. Clone Repository

git clone https://github.com/KampusMeal/kampusmeal-backend.git
cd kampusmeal-backend

3. Instalasi Dependensi

Install semua dependencies menggunakan pnpm:

pnpm install

4. Setup Environment Variable

Buat 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=development

Catatan: Untuk mendapatkan kredensial Firebase, download Service Account Key dari Firebase Console β†’ Project Settings β†’ Service Accounts.

5. Jalankan Development Server

Mulai server dalam mode development (auto-reload):

pnpm run start:dev

Server akan berjalan di http://localhost:3000

6. Testing API

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 Project

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

πŸ“œ Available Scripts

# 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 tests

πŸ”’ Authentication & Authorization

API menggunakan Firebase Authentication dengan Bearer Token. Setiap request ke endpoint yang dilindungi harus menyertakan header:

Authorization: Bearer <firebase-id-token>

Role-Based Access Control

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)

πŸ“‘ API Endpoints (Overview)

Authentication

  • POST /auth/register - Registrasi user baru
  • POST /auth/login - Login user
  • GET /auth/profile - Ambil profil user (protected)
  • PATCH /auth/profile - Update profil user (protected)

Stalls (Warung)

  • GET /stalls - List semua warung
  • GET /stalls/:id - Detail warung
  • POST /stalls - Buat warung baru (StallOwner/Admin)
  • PATCH /stalls/:id - Update warung (StallOwner/Admin)
  • DELETE /stalls/:id - Hapus warung (Admin)

Menu Items

  • GET /menu-items - List semua menu
  • GET /menu-items/:id - Detail menu
  • POST /menu-items - Tambah menu baru (StallOwner/Admin)
  • PATCH /menu-items/:id - Update menu (StallOwner/Admin)
  • DELETE /menu-items/:id - Hapus menu (StallOwner/Admin)

Cart

  • 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)

Orders

  • POST /orders/checkout - Checkout keranjang (Student)
  • GET /orders - List pesanan user (Student/StallOwner)
  • GET /orders/:id - Detail pesanan
  • PATCH /orders/:id/status - Update status pesanan (StallOwner/Admin)
  • PATCH /orders/:id/reject - Tolak pesanan (StallOwner/Admin)

Reviews

  • POST /reviews - Tambah review (Student)
  • GET /reviews/stall/:stallId - Review untuk warung tertentu
  • GET /reviews/menu/:menuId - Review untuk menu tertentu

πŸ§ͺ Testing

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

🌐 Deployment

Production Build

# Build project
pnpm run build

# Jalankan production server
pnpm run start:prod

Environment Variables (Production)

Pastikan semua environment variables sudah di-set dengan benar di production environment:

  • NODE_ENV=production
  • PORT=3000 (atau sesuai kebutuhan)
  • Firebase credentials (FIREBASE_PROJECT_ID, FIREBASE_PRIVATE_KEY, FIREBASE_CLIENT_EMAIL)

Rekomendasi Platform Deployment

  • 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 Tambahan

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

🀝 Kontribusi

Project ini dikembangkan untuk keperluan Tugas Akhir / Product Development KampusMeal. Kontribusi terbatas pada tim pengembang yang berwenang.

Workflow Kontribusi

  1. Pastikan branch Anda up-to-date dengan dev branch.

  2. Buat branch baru untuk fitur: git checkout -b feature/nama-fitur

  3. Commit dengan Conventional Commits:

    git commit -m "feat: add order notification feature"
  4. Push dan buat Pull Request ke dev branch.

  5. Pastikan tidak ada linting error dan semua tests pass.

Commit Convention

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

πŸ“ž Support & Contact

Untuk pertanyaan atau bantuan terkait project ini, silakan hubungi:

πŸ“„ License

Project ini bersifat UNLICENSED dan dikembangkan untuk keperluan akademis (Tugas Akhir).
Β© 2025 KampusMeal Team. All rights reserved.


Dibuat dengan ❀️ oleh Tim KampusMeal

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors