MIF_E31231027/smart_cycling_api/create_trigger.sql

43 lines
1.2 KiB
SQL

-- TRIGGER untuk otomatis menghitung waktu_dasar sebelum INSERT
DELIMITER //
CREATE TRIGGER IF NOT EXISTS trg_calculate_waktu_dasar_insert
BEFORE INSERT ON routes
FOR EACH ROW
BEGIN
DECLARE speed FLOAT DEFAULT 21;
IF NEW.kondisi_medan = 'Medan Beraspal' THEN
SET speed = 26;
ELSEIF NEW.kondisi_medan = 'Medan Berkerikil' THEN
SET speed = 17.5;
ELSE
SET speed = 21; -- Default / Medan Campuran
END IF;
SET NEW.waktu_dasar = ROUND((NEW.jarak / speed) * 60);
END;
//
-- TRIGGER untuk otomatis menghitung waktu_dasar sebelum UPDATE
CREATE TRIGGER IF NOT EXISTS trg_calculate_waktu_dasar_update
BEFORE UPDATE ON routes
FOR EACH ROW
BEGIN
DECLARE speed FLOAT DEFAULT 21;
-- Hanya hitung ulang jika medan atau jarak berubah
IF NEW.kondisi_medan != OLD.kondisi_medan OR NEW.jarak != OLD.jarak OR NEW.waktu_dasar = 0 THEN
IF NEW.kondisi_medan = 'Medan Beraspal' THEN
SET speed = 26;
ELSEIF NEW.kondisi_medan = 'Medan Berkerikil' THEN
SET speed = 17.5;
ELSE
SET speed = 21; -- Default / Medan Campuran
END IF;
SET NEW.waktu_dasar = ROUND((NEW.jarak / speed) * 60);
END IF;
END;
//
DELIMITER ;