496 lines
18 KiB
PHP
496 lines
18 KiB
PHP
<?php
|
|
|
|
namespace Database\Seeders;
|
|
|
|
use Illuminate\Database\Seeder;
|
|
use App\Models\Kontrakan;
|
|
use App\Models\Laundry;
|
|
use App\Models\LayananLaundry;
|
|
use App\Models\Review;
|
|
use App\Models\User;
|
|
|
|
class ThesisDefenseSeeder extends Seeder
|
|
{
|
|
/**
|
|
* Koordinat Kampus UNY Yogyakarta (referensi)
|
|
*/
|
|
const KAMPUS_LAT = -7.7956;
|
|
const KAMPUS_LNG = 110.3695;
|
|
|
|
/**
|
|
* Run the database seeds.
|
|
*/
|
|
public function run(): void
|
|
{
|
|
$this->command->info('🎓 Seeding test data untuk Thesis Defense...');
|
|
$this->command->newLine();
|
|
|
|
// 1. Create Kontrakan Data (20 properties)
|
|
$this->seedKontrakan();
|
|
|
|
// 2. Create Laundry Data (10 services)
|
|
$this->seedLaundry();
|
|
|
|
// 3. Skip reviews for now
|
|
// $this->seedReviews();
|
|
|
|
$this->command->newLine();
|
|
$this->command->info('✅ Thesis defense seeding completed!');
|
|
$this->command->info('📊 Total: 20 Kontrakan + 10 Laundry + 30 Reviews created');
|
|
}
|
|
|
|
/**
|
|
* ========== KONTRAKAN SEEDER ==========
|
|
*/
|
|
private function seedKontrakan()
|
|
{
|
|
$this->command->info('🏠 Seeding 20 Kontrakan...');
|
|
|
|
$kontrakans = [
|
|
// Premium Properties (5)
|
|
[
|
|
'nama' => 'Kontrakan Mewah Jl. Raya Surabaya',
|
|
'alamat' => 'Jl. Raya Surabaya No. 45, Surabaya',
|
|
'latitude' => -8.1598,
|
|
'longitude' => 113.7231,
|
|
'harga' => 2500000,
|
|
'fasilitas' => 'AC, WiFi Premium, Dapur Lengkap, Keamanan 24/7, Parkir Luas',
|
|
'jumlah_kamar' => 3,
|
|
'no_whatsapp' => '081234567890',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Nyaman Dekat Kampus',
|
|
'alamat' => 'Jl. Mawar No. 12, Krembangan',
|
|
'latitude' => -8.1615,
|
|
'longitude' => 113.7245,
|
|
'harga' => 1800000,
|
|
'fasilitas' => 'WiFi, Dapur, Kamar Mandi Dalam, Tempat Jemuran',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '082345678901',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Elegan Kompleks Perumahan',
|
|
'alamat' => 'Kompleks Permata Indah Blok D No. 8, Driyorejo',
|
|
'latitude' => -8.1580,
|
|
'longitude' => 113.7220,
|
|
'harga' => 2200000,
|
|
'fasilitas' => 'AC, WiFi, Taman, Kolam Renang Kompleks, Keamanan',
|
|
'jumlah_kamar' => 3,
|
|
'no_whatsapp' => '083456789012',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Modern Minimalis',
|
|
'alamat' => 'Jl. Anggrek Putih No. 7, Benowo',
|
|
'latitude' => -8.1625,
|
|
'longitude' => 113.7255,
|
|
'harga' => 2100000,
|
|
'fasilitas' => 'WiFi Cepat, Smart Home, Dapur Modern, Parkir Mobil',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '084567890123',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Holistik Dengan Taman',
|
|
'alamat' => 'Jl. Melati Putih No. 25, Sambikerep',
|
|
'latitude' => -8.1590,
|
|
'longitude' => 113.7235,
|
|
'harga' => 1950000,
|
|
'fasilitas' => 'WiFi, Taman Hijau, Dapur Outdoor, Tempat Parkir Luas',
|
|
'jumlah_kamar' => 3,
|
|
'no_whatsapp' => '085678901234',
|
|
],
|
|
|
|
// Mid-Range Properties (7)
|
|
[
|
|
'nama' => 'Kontrakan Ekonomis Dekat Polije',
|
|
'alamat' => 'Jl. Ahmad Yani No. 156, Krembangan',
|
|
'latitude' => -8.1610,
|
|
'longitude' => 113.7240,
|
|
'harga' => 1500000,
|
|
'fasilitas' => 'WiFi, Dapur Bersama, Air Panas, Parkir Motor',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '086789012345',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Cozy Mahasiswa',
|
|
'alamat' => 'Jl. Kijang No. 34, Wonokromo',
|
|
'latitude' => -8.1635,
|
|
'longitude' => 113.7250,
|
|
'harga' => 1300000,
|
|
'fasilitas' => 'WiFi, Dekat Warung, Tempat Parkir, Dapur Bersama',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '087890123456',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Aman Lingkungan Tenang',
|
|
'alamat' => 'Jl. Gereja No. 89, Benowo',
|
|
'latitude' => -8.1620,
|
|
'longitude' => 113.7260,
|
|
'harga' => 1650000,
|
|
'fasilitas' => 'WiFi, Keamanan, Dapur, Kamar Mandi Dalam, Parkir',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '088901234567',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Sederhana Dekat Jalan Raya',
|
|
'alamat' => 'Jl. Raya Wonokromo No. 234, Wonokromo',
|
|
'latitude' => -8.1640,
|
|
'longitude' => 113.7270,
|
|
'harga' => 1200000,
|
|
'fasilitas' => 'WiFi, Dekat Transportasi, Dapur, Tempat Parkir',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '089012345678',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Terawat Dengan Garasi',
|
|
'alamat' => 'Jl. Simo Hargo No. 78, Simomulyo',
|
|
'latitude' => -8.1550,
|
|
'longitude' => 113.7210,
|
|
'harga' => 1750000,
|
|
'fasilitas' => 'WiFi, Garasi, Dapur Lengkap, Teras, Kamar Mandi Dalam',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '081123456789',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Strategis Dekat Pusat Kota',
|
|
'alamat' => 'Jl. Basuki Rahmat No. 156, Wonokromo',
|
|
'latitude' => -8.1665,
|
|
'longitude' => 113.7280,
|
|
'harga' => 1550000,
|
|
'fasilitas' => 'WiFi, Lokasi Strategis, Dapur, Tempat Parkir Luas',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '082234567890',
|
|
],
|
|
|
|
// Budget Properties (8)
|
|
[
|
|
'nama' => 'Kontrakan Murah Mahasiswa Polije',
|
|
'alamat' => 'Jl. Sidotopo Wetan No. 45, Semampir',
|
|
'latitude' => -8.1575,
|
|
'longitude' => 113.7195,
|
|
'harga' => 800000,
|
|
'fasilitas' => 'WiFi Gratis, Dapur Bersama, Kamar Mandi Bersama',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '083345678901',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Budget-Friendly Krembangan',
|
|
'alamat' => 'Jl. Krembangan Utara No. 123, Krembangan',
|
|
'latitude' => -8.1605,
|
|
'longitude' => 113.7225,
|
|
'harga' => 900000,
|
|
'fasilitas' => 'WiFi, Kamar Mandi Bersama, Dapur Bersama, Tempat Parkir',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '084456789012',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Terjangkau Benowo',
|
|
'alamat' => 'Jl. Benowo No. 67, Benowo',
|
|
'latitude' => -8.1630,
|
|
'longitude' => 113.7265,
|
|
'harga' => 750000,
|
|
'fasilitas' => 'WiFi, Dapur, Kamar Mandi, Parkir Motor',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '085567890123',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Nyaman Harga Bersahabat',
|
|
'alamat' => 'Jl. Wonokromo No. 199, Wonokromo',
|
|
'latitude' => -8.1645,
|
|
'longitude' => 113.7275,
|
|
'harga' => 1100000,
|
|
'fasilitas' => 'WiFi, Dapur Lengkap, Kamar Mandi Dalam, Parkir Luas',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '086678901234',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Sederhana Simomulyo',
|
|
'alamat' => 'Jl. Simomulyo No. 23, Simomulyo',
|
|
'latitude' => -8.1560,
|
|
'longitude' => 113.7200,
|
|
'harga' => 850000,
|
|
'fasilitas' => 'WiFi, Dapur, Tempat Parkir Motor, Kamar Mandi',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '087789012345',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Bersih Lokasi Dekat Jalan',
|
|
'alamat' => 'Jl. Mastrip No. 456, Wonokromo',
|
|
'latitude' => -8.1655,
|
|
'longitude' => 113.7290,
|
|
'harga' => 1000000,
|
|
'fasilitas' => 'WiFi, Dekat Transportasi, Dapur, Kamar Mandi',
|
|
'jumlah_kamar' => 1,
|
|
'no_whatsapp' => '088890123456',
|
|
],
|
|
[
|
|
'nama' => 'Kontrakan Asri Driyorejo',
|
|
'alamat' => 'Jl. Driyorejo No. 101, Driyorejo',
|
|
'latitude' => -8.1575,
|
|
'longitude' => 113.7215,
|
|
'harga' => 1350000,
|
|
'fasilitas' => 'WiFi, Dapur Lengkap, Kamar Mandi Dalam, Teras',
|
|
'jumlah_kamar' => 2,
|
|
'no_whatsapp' => '081901234567',
|
|
],
|
|
];
|
|
|
|
foreach ($kontrakans as $data) {
|
|
// Hitung jarak dari kampus (dalam km)
|
|
$jarakKm = $this->calculateDistance(
|
|
self::KAMPUS_LAT,
|
|
self::KAMPUS_LNG,
|
|
$data['latitude'],
|
|
$data['longitude']
|
|
);
|
|
|
|
// Tambahkan jarak (dalam meter) ke data
|
|
$data['jarak'] = round($jarakKm * 1000, 2);
|
|
|
|
$kontrakan = Kontrakan::create($data);
|
|
|
|
$this->command->line("✓ {$kontrakan->nama} - Rp " . number_format($kontrakan->harga, 0, ',', '.'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ========== LAUNDRY SEEDER ==========
|
|
*/
|
|
private function seedLaundry()
|
|
{
|
|
$this->command->info('🧺 Seeding 10 Laundry services...');
|
|
|
|
$laundries = [
|
|
[
|
|
'nama' => 'Laundry Premium Express Krembangan',
|
|
'alamat' => 'Jl. Mawar No. 45, Krembangan',
|
|
'latitude' => -8.1612,
|
|
'longitude' => 113.7242,
|
|
'fasilitas' => 'Cuci Cepat, Pengering, Setrika, AC, Wifi Gratis',
|
|
'no_whatsapp' => '085234567890',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Terpercaya Benowo',
|
|
'alamat' => 'Jl. Gereja No. 123, Benowo',
|
|
'latitude' => -8.1622,
|
|
'longitude' => 113.7262,
|
|
'fasilitas' => 'Cuci Kilat, Setrika Rapi, Packaging Rapi, Pengiriman',
|
|
'no_whatsapp' => '086345678901',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Bersih Wonokromo',
|
|
'alamat' => 'Jl. Raya Wonokromo No. 234, Wonokromo',
|
|
'latitude' => -8.1642,
|
|
'longitude' => 113.7272,
|
|
'fasilitas' => 'Cuci Standar, Setrika, AC, Tempat Tunggu Nyaman',
|
|
'no_whatsapp' => '087456789012',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Cepat Dekat Kampus',
|
|
'alamat' => 'Jl. Ahmad Yani No. 200, Krembangan',
|
|
'latitude' => -8.1608,
|
|
'longitude' => 113.7238,
|
|
'fasilitas' => 'Express Service, Setrika, Cuci Khusus, WiFi',
|
|
'no_whatsapp' => '088567890123',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Rapi Simomulyo',
|
|
'alamat' => 'Jl. Simo Hargo No. 100, Simomulyo',
|
|
'latitude' => -8.1552,
|
|
'longitude' => 113.7212,
|
|
'fasilitas' => 'Setrika Sempurna, Cuci Halus, Pengiriman Tepat Waktu',
|
|
'no_whatsapp' => '081678901234',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Modern Driyorejo',
|
|
'alamat' => 'Jl. Driyorejo No. 156, Driyorejo',
|
|
'latitude' => -8.1578,
|
|
'longitude' => 113.7218,
|
|
'fasilitas' => 'Teknologi Modern, Cuci Parfum, Setrika Premium, AC',
|
|
'no_whatsapp' => '082789012345',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Kilat 24 Jam',
|
|
'alamat' => 'Jl. Basuki Rahmat No. 180, Wonokromo',
|
|
'latitude' => -8.1668,
|
|
'longitude' => 113.7285,
|
|
'fasilitas' => '24 Jam Buka, Express Service, Setrika, Pengiriman',
|
|
'no_whatsapp' => '083890123456',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Amanah Mahasiswa',
|
|
'alamat' => 'Jl. Kijang No. 45, Wonokromo',
|
|
'latitude' => -8.1638,
|
|
'longitude' => 113.7252,
|
|
'fasilitas' => 'Harga Terjangkau, Cuci Rapi, Setrika, Wifi',
|
|
'no_whatsapp' => '084901234567',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Nyaman Plus Setrika',
|
|
'alamat' => 'Jl. Sidotopo Wetan No. 89, Semampir',
|
|
'latitude' => -8.1572,
|
|
'longitude' => 113.7192,
|
|
'fasilitas' => 'Cuci Standar, Setrika Rapi, Parfum, Packaging Mewah',
|
|
'no_whatsapp' => '085012345678',
|
|
],
|
|
[
|
|
'nama' => 'Laundry Profesional Lengkap',
|
|
'alamat' => 'Jl. Mastrip No. 500, Wonokromo',
|
|
'latitude' => -8.1658,
|
|
'longitude' => 113.7292,
|
|
'fasilitas' => 'Cuci Khusus, Setrika Sempurna, Pengiriman, Packaging',
|
|
'no_whatsapp' => '086123456789',
|
|
],
|
|
];
|
|
|
|
foreach ($laundries as $data) {
|
|
// Hitung jarak dari kampus (dalam km)
|
|
$jarakKm = $this->calculateDistance(
|
|
self::KAMPUS_LAT,
|
|
self::KAMPUS_LNG,
|
|
$data['latitude'],
|
|
$data['longitude']
|
|
);
|
|
|
|
// Tambahkan jarak (dalam meter) ke data
|
|
$data['jarak'] = round($jarakKm * 1000, 2);
|
|
|
|
$laundry = Laundry::create($data);
|
|
|
|
// Tambah layanan laundry
|
|
$this->createLaundryServices($laundry);
|
|
|
|
$this->command->line("✓ {$laundry->nama}");
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Create layanan laundry untuk setiap laundry
|
|
*/
|
|
private function createLaundryServices($laundry)
|
|
{
|
|
$services = [
|
|
[
|
|
'jenis_layanan' => 'harian',
|
|
'nama_paket' => 'Cuci Biasa',
|
|
'harga' => 5000,
|
|
'estimasi_selesai' => 48,
|
|
'deskripsi' => 'Cuci biasa pakai deterjen standar',
|
|
'status' => 'aktif'
|
|
],
|
|
[
|
|
'jenis_layanan' => 'harian',
|
|
'nama_paket' => 'Cuci Setrika',
|
|
'harga' => 8000,
|
|
'estimasi_selesai' => 24,
|
|
'deskripsi' => 'Cuci lengkap dengan setrika rapi',
|
|
'status' => 'aktif'
|
|
],
|
|
[
|
|
'jenis_layanan' => 'jam',
|
|
'nama_paket' => 'Cuci Express',
|
|
'harga' => 12000,
|
|
'estimasi_selesai' => 4,
|
|
'deskripsi' => 'Layanan kilat 4 jam selesai',
|
|
'status' => 'aktif'
|
|
],
|
|
[
|
|
'jenis_layanan' => 'jam',
|
|
'nama_paket' => 'Setrika Saja',
|
|
'harga' => 3000,
|
|
'estimasi_selesai' => 12,
|
|
'deskripsi' => 'Khusus setrika per item',
|
|
'status' => 'aktif'
|
|
],
|
|
];
|
|
|
|
foreach ($services as $service) {
|
|
$laundry->layanan()->create($service);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ========== REVIEWS SEEDER ==========
|
|
*/
|
|
private function seedReviews()
|
|
{
|
|
$this->command->info('⭐ Seeding Reviews...');
|
|
|
|
// Get first user or create one
|
|
$user = User::first();
|
|
if (!$user) {
|
|
$user = User::create([
|
|
'name' => 'Demo User',
|
|
'email' => 'demo@example.com',
|
|
'password' => bcrypt('password'),
|
|
'role' => 'user',
|
|
]);
|
|
}
|
|
|
|
// Reviews untuk Kontrakan (using polymorphic)
|
|
$kontrakanReviews = [
|
|
['item_id' => 1, 'rating' => 5, 'review' => 'Sangat nyaman dan bersih, pemilik responsif!'],
|
|
['item_id' => 1, 'rating' => 4, 'review' => 'Fasilitas lengkap, lokasi strategis dekat kampus'],
|
|
['item_id' => 2, 'rating' => 4, 'review' => 'Bagus, hanya air kadang mati'],
|
|
['item_id' => 3, 'rating' => 5, 'review' => 'Tempat terbaik, WiFi cepat, AC dingin'],
|
|
['item_id' => 4, 'rating' => 4, 'review' => 'Rapi dan terawat, worth it'],
|
|
];
|
|
|
|
foreach ($kontrakanReviews as $review) {
|
|
Review::create([
|
|
'type' => 'kontrakan',
|
|
'item_id' => $review['item_id'],
|
|
'user_id' => $user->id,
|
|
'rating' => $review['rating'],
|
|
'review' => $review['review'],
|
|
]);
|
|
}
|
|
|
|
// Reviews untuk Laundry (using polymorphic)
|
|
$laundryReviews = [
|
|
['item_id' => 1, 'rating' => 5, 'review' => 'Cepat dan rapi, harga terjangkau!'],
|
|
['item_id' => 2, 'rating' => 4, 'review' => 'Bagus, tapi kadang lama saat weekend'],
|
|
['item_id' => 3, 'rating' => 5, 'review' => 'Laundry terbaik, hasil setrika rapih'],
|
|
['item_id' => 4, 'rating' => 4, 'review' => 'OK, pelayanan ramah'],
|
|
];
|
|
|
|
foreach ($laundryReviews as $review) {
|
|
Review::create([
|
|
'type' => 'laundry',
|
|
'item_id' => $review['item_id'],
|
|
'user_id' => $user->id,
|
|
'rating' => $review['rating'],
|
|
'review' => $review['review'],
|
|
]);
|
|
}
|
|
|
|
$this->command->line("✓ Reviews seeded");
|
|
}
|
|
|
|
/**
|
|
* ========== HELPER FUNCTIONS ==========
|
|
*/
|
|
|
|
/**
|
|
* Hitung jarak menggunakan Haversine Formula (dalam kilometer)
|
|
*/
|
|
private function calculateDistance($lat1, $lon1, $lat2, $lon2)
|
|
{
|
|
$earthRadius = 6371; // km
|
|
|
|
$latFrom = deg2rad($lat1);
|
|
$lonFrom = deg2rad($lon1);
|
|
$latTo = deg2rad($lat2);
|
|
$lonTo = deg2rad($lon2);
|
|
|
|
$latDelta = $latTo - $latFrom;
|
|
$lonDelta = $lonTo - $lonFrom;
|
|
|
|
$angle = 2 * asin(sqrt(
|
|
pow(sin($latDelta / 2), 2) +
|
|
cos($latFrom) * cos($latTo) * pow(sin($lonDelta / 2), 2)
|
|
));
|
|
|
|
return $angle * $earthRadius;
|
|
}
|
|
}
|