7.5 KiB
7.5 KiB
Dokumentasi Pemisahan Web & Mobile SPK Kontrakan
📋 Overview
Project SPK Kontrakan telah direstrukturisasi menjadi 2 bagian terpisah:
1. spk_kontrakan (Web Laravel)
- Fungsi: Dashboard Admin/Pemilik Kontrakan
- Pengguna: Admin, Pemilik
- Akses:
http://localhost/spk_kontrakan - Fitur:
- Manajemen Kontrakan & Laundry
- Dashboard statistik
- Perhitungan SAW
- Manajemen Booking
- Activity Logs
- User Management
- Export Data (PDF/Excel)
- Backup & Restore
2. spk_mobile (Flutter)
- Fungsi: Aplikasi Mobile untuk User/Pencari Kontrakan
- Pengguna: User Umum (Pencari Kontrakan)
- Fitur:
- Register & Login User
- Pencarian Kontrakan & Laundry dengan SAW
- Detail Kontrakan dengan Galeri
- Booking Kontrakan
- Review & Rating
- Favorit Kontrakan/Laundry
- History Booking
🚀 Cara Menjalankan
Web (spk_kontrakan)
-
Start Laravel Server
cd spk_kontrakan php artisan serve -
Akses Admin Portal
- URL:
http://localhost:8000/admin-portal - Login Admin:
http://localhost:8000/admin/login
- URL:
Mobile (spk_mobile)
-
Install Dependencies
cd spk_mobile flutter pub get -
Jalankan di Emulator/Device
flutter run -
Konfigurasi API Base URL
- Edit file config untuk mengarah ke Laravel API
- Base URL:
http://10.0.2.2:8000/api(untuk Android Emulator) - Base URL:
http://localhost:8000/api(untuk iOS Simulator)
🔗 API Endpoints untuk Mobile
Base URL: http://localhost:8000/api
Authentication (Public)
POST /api/register - Register user baru
POST /api/login - Login user
Kontrakan (Public)
GET /api/kontrakan - List semua kontrakan
GET /api/kontrakan/{id} - Detail kontrakan
GET /api/kontrakan/{id}/galeri - Galeri foto kontrakan
GET /api/kontrakan/{id}/reviews - Review kontrakan
Laundry (Public)
GET /api/laundry - List semua laundry
GET /api/laundry/{id} - Detail laundry
GET /api/laundry/{id}/galeri - Galeri foto laundry
GET /api/laundry/{id}/reviews - Review laundry
SAW Calculation (Public)
GET /api/saw/kriteria/kontrakan - Get kriteria kontrakan
POST /api/saw/calculate/kontrakan - Hitung SAW kontrakan
GET /api/saw/kriteria/laundry - Get kriteria laundry
POST /api/saw/calculate/laundry - Hitung SAW laundry
Protected Endpoints (Butuh Token)
User Profile
GET /api/user - Get user info
POST /api/logout - Logout
PUT /api/profile/update - Update profile
Booking
GET /api/bookings - History booking
GET /api/bookings/{id} - Detail booking
POST /api/bookings - Create booking
POST /api/bookings/{id}/cancel - Cancel booking
POST /api/bookings/{id}/extend - Perpanjang booking
Reviews
POST /api/reviews/kontrakan/{id} - Buat review kontrakan
POST /api/reviews/laundry/{id} - Buat review laundry
PUT /api/reviews/{id} - Update review
DELETE /api/reviews/{id} - Hapus review
Favorites
GET /api/favorites - List favorites
POST /api/favorites/kontrakan/{id} - Toggle favorite kontrakan
POST /api/favorites/laundry/{id} - Toggle favorite laundry
DELETE /api/favorites/{id} - Hapus favorite
🔐 Authentication (Mobile)
Mobile app menggunakan Laravel Sanctum untuk authentication.
Login Flow
- User login → POST
/api/login - Server return
token - Simpan token di local storage
- Kirim token di header untuk protected endpoints:
Authorization: Bearer {token}
Request Example
// Login
final response = await http.post(
Uri.parse('http://10.0.2.2:8000/api/login'),
body: {
'email': 'user@example.com',
'password': 'password123',
},
);
// Get token
final token = json.decode(response.body)['data']['token'];
// Use token for protected endpoint
final bookingsResponse = await http.get(
Uri.parse('http://10.0.2.2:8000/api/bookings'),
headers: {
'Authorization': 'Bearer $token',
'Accept': 'application/json',
},
);
📦 Response Format
Semua API endpoint mengembalikan response dalam format JSON:
Success Response
{
"success": true,
"message": "Operasi berhasil",
"data": {
// data object or array
}
}
Error Response
{
"success": false,
"message": "Error message",
"errors": {
// validation errors (optional)
}
}
🗄️ Database
Kedua aplikasi menggunakan database yang sama:
- Database:
spk_kontrakan - Tables: users, kontrakan, laundry, kriteria, bookings, reviews, favorites, dll.
User Roles
admin- Akses web dashboarduser- Akses mobile app
⚙️ Setup Laravel Sanctum
Jika belum diinstall, jalankan:
cd spk_kontrakan
# Install Sanctum (biasanya sudah terinstall di Laravel 11)
composer require laravel/sanctum
# Publish config
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
# Migrate
php artisan migrate
# Add Sanctum middleware ke api kernel
Pastikan di config/sanctum.php:
'stateful' => explode(',', env('SANCTUM_STATEFUL_DOMAINS', sprintf(
'%s%s',
'localhost,localhost:3000,127.0.0.1,127.0.0.1:8000,::1',
Sanctum::currentApplicationUrlWithPort()
))),
📱 Mobile App Structure
spk_mobile/lib/
├── main.dart # Entry point
├── login.dart # Login screen
├── register.dart # Register screen
├── screens/ # Screens lainnya
│ ├── home_screen.dart
│ ├── search_screen.dart
│ ├── detail_screen.dart
│ ├── booking_screen.dart
│ └── profile_screen.dart
├── services/ # API Services
│ ├── api_service.dart
│ ├── auth_service.dart
│ └── saw_service.dart
└── models/ # Data models
├── kontrakan.dart
├── booking.dart
└── user.dart
🔧 Troubleshooting
CORS Error
Tambahkan di config/cors.php:
'paths' => ['api/*', 'sanctum/csrf-cookie'],
'allowed_origins' => ['*'],
'allowed_methods' => ['*'],
'allowed_headers' => ['*'],
Connection Refused (Android Emulator)
Gunakan 10.0.2.2 instead of localhost:
final baseUrl = 'http://10.0.2.2:8000/api';
419 CSRF Token Error
Pastikan Sanctum sudah terkonfigurasi dengan benar dan gunakan Accept: application/json header.
📝 Catatan Penting
- Web Dashboard hanya untuk Admin - tidak ada akses user
- Mobile App hanya untuk User - tidak ada akses admin
- API menggunakan JSON untuk semua komunikasi
- Pastikan Laravel server running sebelum menjalankan mobile app
- Gunakan Sanctum token untuk protected endpoints
🎯 Next Steps
Untuk Web:
- Tambah fitur notifikasi booking baru
- Tambah dashboard analytics lebih detail
- Implementasi role permissions (owner vs superadmin)
Untuk Mobile:
- Implementasi push notifications
- Tambah filter advanced di search
- Implementasi Google Maps untuk lokasi
- Tambah payment gateway integration
- Dark mode support
📞 Support
Jika ada pertanyaan atau masalah, hubungi developer team.
Terakhir diupdate: 30 Januari 2026