Files
D1041231027-WebGIS/03/database/migrations.sql
T
2026-06-10 23:46:40 +07:00

80 lines
4.4 KiB
SQL

-- migrations.sql
-- Run this SQL script in phpMyAdmin or your MySQL client for database "bansos_gis"
-- 1. Membuat tabel 'users' untuk multi-role
CREATE TABLE IF NOT EXISTS `users` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`username` VARCHAR(100) NOT NULL UNIQUE,
`email` VARCHAR(150) NOT NULL UNIQUE,
`password` VARCHAR(255) NOT NULL,
`role` ENUM('admin', 'petugas', 'koordinator', 'kontributor') NOT NULL DEFAULT 'kontributor',
`rumah_ibadah_id` INT(11) NULL DEFAULT NULL COMMENT 'Terhubung ke rumah ibadah tertentu untuk Petugas & Koordinator',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`),
CONSTRAINT `fk_users_rumah_ibadah` FOREIGN KEY (`rumah_ibadah_id`) REFERENCES `rumah_ibadah` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 2. Membuat tabel 'kebutuhan' rumah ibadah
CREATE TABLE IF NOT EXISTS `kebutuhan` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`rumah_ibadah_id` INT(11) NOT NULL,
`jenis_bantuan` VARCHAR(150) NOT NULL COMMENT 'Contoh: Beras, Uang Operasional, Jasa Renovasi, dll',
`kategori` ENUM('uang', 'barang', 'jasa') NOT NULL DEFAULT 'barang',
`satuan` VARCHAR(32) NULL DEFAULT 'unit' COMMENT 'satuan untuk jumlah_dibutuhkan (orang/jam/shift/unit/nominal)',
`jumlah_dibutuhkan` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`),
CONSTRAINT `fk_kebutuhan_rumah_ibadah` FOREIGN KEY (`rumah_ibadah_id`) REFERENCES `rumah_ibadah` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 3. Membuat tabel 'kontribusi' oleh kontributor
CREATE TABLE IF NOT EXISTS `kontribusi` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`kebutuhan_id` INT(11) NOT NULL,
`jenis_kontribusi` ENUM('uang', 'barang', 'jasa') NOT NULL,
`jumlah` DECIMAL(15,2) NOT NULL DEFAULT 0.00,
`detail_barang_jasa` TEXT NULL COMMENT 'Deskripsi detail barang/jasa yang disumbangkan',
`status` ENUM('pending', 'confirmed') NOT NULL DEFAULT 'pending',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP(),
`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP() ON UPDATE CURRENT_TIMESTAMP(),
PRIMARY KEY (`id`),
CONSTRAINT `fk_kontribusi_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
CONSTRAINT `fk_kontribusi_kebutuhan` FOREIGN KEY (`kebutuhan_id`) REFERENCES `kebutuhan` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
-- 4. Seed User Awal (Password: password)
-- Hash bcrypt untuk password: $2y$12$Td.8DekFWH9oZSCoKcttVuNbaa8gdqKhNvMVdpo8oUGI6miZRFjZe
INSERT INTO `users` (`username`, `email`, `password`, `role`, `rumah_ibadah_id`)
VALUES
('admin', 'admin@webgis.com', '$2y$12$Td.8DekFWH9oZSCoKcttVuNbaa8gdqKhNvMVdpo8oUGI6miZRFjZe', 'admin', NULL)
ON DUPLICATE KEY UPDATE `username`=`username`;
INSERT INTO `users` (`username`, `email`, `password`, `role`, `rumah_ibadah_id`)
VALUES
('petugas', 'petugas@webgis.com', '$2y$12$Td.8DekFWH9oZSCoKcttVuNbaa8gdqKhNvMVdpo8oUGI6miZRFjZe', 'petugas', 1)
ON DUPLICATE KEY UPDATE `username`=`username`;
INSERT INTO `users` (`username`, `email`, `password`, `role`, `rumah_ibadah_id`)
VALUES
('koordinator', 'koordinator@webgis.com', '$2y$12$Td.8DekFWH9oZSCoKcttVuNbaa8gdqKhNvMVdpo8oUGI6miZRFjZe', 'koordinator', 1)
ON DUPLICATE KEY UPDATE `username`=`username`;
INSERT INTO `users` (`username`, `email`, `password`, `role`, `rumah_ibadah_id`)
VALUES
('kontributor', 'kontributor@webgis.com', '$2y$12$Td.8DekFWH9oZSCoKcttVuNbaa8gdqKhNvMVdpo8oUGI6miZRFjZe', 'kontributor', NULL)
ON DUPLICATE KEY UPDATE `username`=`username`;
-- 5. Seed Kebutuhan Awal untuk Demonstrasi
INSERT INTO `kebutuhan` (`id`, `rumah_ibadah_id`, `jenis_bantuan`, `kategori`, `jumlah_dibutuhkan`)
VALUES
(1, 1, 'Beras Sembako (KK)', 'barang', 10.00),
(2, 1, 'Dana Operasional Santunan', 'uang', 5000000.00),
(3, 2, 'Relawan Pembagi Paket Beras', 'jasa', 5.00)
ON DUPLICATE KEY UPDATE `id`=`id`;
-- Backfill/ensure `satuan` exists for existing installations
ALTER TABLE `kebutuhan` ADD COLUMN IF NOT EXISTS `satuan` VARCHAR(32) NULL DEFAULT 'unit' COMMENT 'satuan untuk jumlah_dibutuhkan (orang/jam/shift/unit/nominal)';