# Sistem Reservasi Barbershop Modern
Sistem pemesanan barbershop yang lengkap dan siap produksi dengan antarmuka pengguna (UI) modern, fungsionalitas full-stack, serta fitur komprehensif untuk pelanggan dan administrator.





## Fitur
### Fitur Pelanggan
- **Registrasi & Login Pengguna** - Autentikasi aman menggunakan JWT.
- **Dashboard** - Tampilan personal dengan statistik pemesanan.
- **Sistem Booking** - Wizard pemesanan multi-langkah dengan ketersediaan waktu nyata (real-time).
- **Booking Saya** - Lihat, kelola, dan batalkan janji temu.
- **Manajemen Profil** - Perbarui informasi pribadi dan preferensi.
- **Riwayat Booking** - Lacak janji temu yang lalu dan yang akan datang.
- **Notifikasi Email** - Konfirmasi booking dan pengingat otomatis.
### Fitur Admin
- **Dashboard Admin** - Analitik komprehensif, grafik pendapatan, dan statistik.
- **Manajemen Booking** - Lihat dan kelola semua pemesanan pelanggan.
- **Kontrol Status** - Perbarui status booking (menunggu, dikonfirmasi, selesai, dibatalkan).
- **Manajemen Layanan** - CRUD operasi untuk layanan (harga, durasi, deskripsi).
- **Manajemen Barber** - Kelola barber, profil, dan jadwal kerja.
- **Manajemen Pengguna** - Lihat dan kelola akun pelanggan.
- **Fungsi Ekspor** - Ekspor data pemesanan untuk pelaporan.
### Fitur Teknis
- **Desain Responsif** - Dioptimalkan sepenuhnya untuk desktop, tablet, dan seluler.
- **Validasi Real-time** - Validasi formulir di sisi klien dan server.
- **Keamanan** - Autentikasi JWT, hashing password bcrypt, CORS, rate limiting, Helmet.js.
- **Database** - PostgreSQL dengan pengindeksan, foreign keys, dan batasan (constraints) yang tepat.
- **Dukungan PWA** - Implementasi service worker untuk kemampuan offline.
- **Dukungan Docker** - Deployment tercontainerisasi dengan Docker Compose.
---
## 🏗 Arsitektur
```text
barbershop-reservation/
├── frontend/ # Aplikasi sisi klien (Client-side)
│ ├── assets/ # CSS, JavaScript, gambar
│ ├── *.html # Halaman HTML (Index, Login, Dashboard, dll.)
│ └── service-worker.js # Konfigurasi PWA
├── backend/ # Aplikasi sisi server (Server-side)
│ ├── config/ # Konfigurasi DB dan App
│ ├── controllers/ # Logika Request (Auth, Booking, Service, Barber)
│ ├── middleware/ # Auth, Validasi, Error Handling
│ ├── models/ # Model Database
│ ├── routes/ # Endpoint API
│ ├── utils/ # Helpers (Email, Date, Validators)
│ └── tests/ # Unit dan Integration tests
├── database/ # Manajemen Database
│ ├── migrations/ # Skrip migrasi skema
│ ├── seeds/ # Data dummy untuk testing
│ └── schema.sql # Skema SQL mentah
├── documentation/ # Panduan proyek
└── docker/ # Konfigurasi Docker
git clone [https://github.com/yourusername/barbershop-reservation.git](https://github.com/yourusername/barbershop-reservation.git)
cd barbershop-reservation
Buat database dan terapkan skema:
# Buat Database
createdb barbershop_db
# Impor Skema
psql barbershop_db < database/schema.sql
# ATAU gunakan script migrasi
cd backend
node scripts/migration.js up
Masuk ke direktori backend dan atur environment variables:
cd backend
cp .env.example .env
npm install
Edit file .env dengan kredensial database Anda (lihat bagian Konfigurasi di bawah).
Isi database dengan data awal (User Admin, Layanan, Barber):
node scripts/seed.js
Jalankan Backend API:
# Dari direktori /backend
npm start
# ATAU untuk mode pengembangan (development)
npm run dev
*Backend berjalan di: https://project1-barber-dyy-website-reservasi-barbershop-l0xeswl4b.const API_URL = ''*
Jalankan Frontend:
# Buka terminal baru, masuk ke /frontend
cd frontend
# Gunakan Python SimpleHTTP (atau server statis lainnya seperti live-server)
python -m http.server 8000
*Frontend berjalan di: http://localhost:8000*
| Role | Password | |
|---|---|---|
| Admin | prasetyaadhi398@gmail.com |
prasetyaadhi045 |
| Customer | farisadam123@gmail.com |
farisadam123 |
| Variabel | Deskripsi | Default |
PORT |
Port Server | 3000 |
NODE_ENV |
Environment | development |
DB_HOST |
Host Database | localhost |
DB_PORT |
Port Database | 5432 |
DB_NAME |
Nama Database | barbershop_db |
DB_USER |
User Database | postgres |
DB_PASSWORD |
Password Database | your_password |
JWT_SECRET |
Rahasia Token | your_jwt_secret |
JWT_EXPIRE |
Kadaluarsa Token | 7d |
EMAIL_ENABLED |
Aktifkan Email | false |
Untuk menjalankan seluruh stack (Frontend, Backend, Database) menggunakan Docker:
# Build Development
docker-compose up -d
# Build Production
docker-compose -f docker-compose.prod.yml up -d
POST /api/auth/register - Registrasi pengguna baruPOST /api/auth/login - Login penggunaGET /api/auth/profile - Dapatkan profil pengguna saat iniGET /api/bookings - Dapatkan semua booking (Admin)POST /api/bookings - Buat booking baruGET /api/bookings/my-bookings - Dapatkan booking user yang sedang loginPUT /api/bookings/:id/status - Perbarui status booking (Admin)GET /api/services - Daftar semua layananPOST /api/services - Tambah layanan (Admin)GET /api/barbers - Daftar semua barberGET /api/barbers/:id/schedule - Dapatkan jadwal barber tertentuJalankan rangkaian tes otomatis yang terletak di backend/tests:
cd backend
# Jalankan semua tes
npm test
# Jalankan file tes tertentu
npm test -- auth.test.js
# Cek cakupan tes (coverage)
npm run test:coverage
git checkout -b feature/FiturKeren).git commit -m 'Menambahkan FiturKeren').git push origin feature/FiturKeren).Proyek ini dilisensikan di bawah Lisensi MIT - lihat file LICENSE untuk detailnya.