From 6ba992dab11960338a9677f7280c213580f0f352 Mon Sep 17 00:00:00 2001 From: Adamalfantino <158027358+Adamalfantino@users.noreply.github.com> Date: Fri, 22 May 2026 22:20:25 +0700 Subject: [PATCH] fix: use firstOrCreate in seeders to prevent duplicate entry --- database/seeders/DeviceSeeder.php | 19 +++++++---------- database/seeders/SensorSeeder.php | 34 ++++++++++++++++--------------- start.sh | 15 ++++++++++++++ 3 files changed, 40 insertions(+), 28 deletions(-) create mode 100644 start.sh diff --git a/database/seeders/DeviceSeeder.php b/database/seeders/DeviceSeeder.php index 5595462..31d062f 100644 --- a/database/seeders/DeviceSeeder.php +++ b/database/seeders/DeviceSeeder.php @@ -2,16 +2,12 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; -use Illuminate\Support\Facades\DB; +use App\Models\Device; use Carbon\Carbon; class DeviceSeeder extends Seeder { - /** - * Run the database seeds. - */ public function run(): void { $devices = [ @@ -33,8 +29,6 @@ public function run(): void ]), 'description' => 'Node sensor utama untuk monitoring rak dengan sensor PIR, getaran, dan reed switch', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], [ 'name' => 'LoRa Gateway', @@ -54,8 +48,6 @@ public function run(): void ]), 'description' => 'Gateway LoRa untuk menerima data dari semua sensor node', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], [ 'name' => 'Server Monitoring', @@ -75,11 +67,14 @@ public function run(): void ]), 'description' => 'Server utama untuk processing dan storage data monitoring', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], ]; - DB::table('devices')->insert($devices); + foreach ($devices as $device) { + Device::firstOrCreate( + ['device_id' => $device['device_id']], + $device + ); + } } } diff --git a/database/seeders/SensorSeeder.php b/database/seeders/SensorSeeder.php index e091643..60a61db 100644 --- a/database/seeders/SensorSeeder.php +++ b/database/seeders/SensorSeeder.php @@ -2,22 +2,22 @@ namespace Database\Seeders; -use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; -use Illuminate\Support\Facades\DB; +use App\Models\Sensor; +use App\Models\Device; use Carbon\Carbon; class SensorSeeder extends Seeder { - /** - * Run the database seeds. - */ public function run(): void { + $device = Device::where('device_id', 'RACK_A_001')->first(); + + if (!$device) return; + $sensors = [ - // Sensors untuk Device Rak A (device_id = 1) [ - 'device_id' => 1, + 'device_id' => $device->id, 'name' => 'PIR Motion Sensor', 'type' => 'pir', 'pin_number' => 'GPIO2', @@ -33,11 +33,9 @@ public function run(): void ]), 'description' => 'Sensor PIR untuk mendeteksi gerakan manusia di area rak', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], [ - 'device_id' => 1, + 'device_id' => $device->id, 'name' => 'Vibration Sensor SW-420', 'type' => 'vibration', 'pin_number' => 'GPIO3', @@ -53,11 +51,9 @@ public function run(): void ]), 'description' => 'Sensor getaran SW-420 untuk mendeteksi guncangan pada rak', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], [ - 'device_id' => 1, + 'device_id' => $device->id, 'name' => 'Reed Switch', 'type' => 'reed_switch', 'pin_number' => 'GPIO4', @@ -72,11 +68,17 @@ public function run(): void ]), 'description' => 'Reed switch untuk mendeteksi status buka/tutup rak', 'is_active' => true, - 'created_at' => Carbon::now(), - 'updated_at' => Carbon::now(), ], ]; - DB::table('sensors')->insert($sensors); + foreach ($sensors as $sensor) { + Sensor::firstOrCreate( + [ + 'device_id' => $sensor['device_id'], + 'type' => $sensor['type'] + ], + $sensor + ); + } } } diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..d52504f --- /dev/null +++ b/start.sh @@ -0,0 +1,15 @@ +#!/bin/bash +set -e + +echo "Running migrations..." +php artisan migrate --force + +echo "Running seeders..." +php artisan db:seed --force || echo "Seeder skipped (data may already exist)" + +echo "Clearing cache..." +php artisan config:clear +php artisan cache:clear + +echo "Starting server..." +php artisan serve --host=0.0.0.0 --port=${PORT:-8000}