106 lines
3.3 KiB
SQL
106 lines
3.3 KiB
SQL
-- ============================================
|
|
-- Migration 001: Create Database Tables
|
|
-- E-Proposal Komite - MySQL Migration
|
|
-- ============================================
|
|
|
|
-- Create database if not exists
|
|
CREATE DATABASE IF NOT EXISTS db_proposalkomite
|
|
DEFAULT CHARACTER SET utf8mb4
|
|
DEFAULT COLLATE utf8mb4_unicode_ci;
|
|
|
|
USE db_proposalkomite;
|
|
|
|
-- ============================================
|
|
-- Table: users
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
id VARCHAR(50) PRIMARY KEY,
|
|
name VARCHAR(255) NOT NULL,
|
|
email VARCHAR(255) UNIQUE NOT NULL,
|
|
phone VARCHAR(20),
|
|
role ENUM(
|
|
'PENGAJU',
|
|
'WAKA_KURIKULUM',
|
|
'WAKA_KESISWAAN',
|
|
'WAKA_SARPRAS',
|
|
'WAKA_HUMAS',
|
|
'KEPALA_SEKOLAH',
|
|
'KOMITE',
|
|
'ADMIN'
|
|
) NOT NULL,
|
|
password VARCHAR(255) NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_role (role),
|
|
INDEX idx_email (email)
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- ============================================
|
|
-- Table: proposals
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS proposals (
|
|
id VARCHAR(50) PRIMARY KEY,
|
|
title VARCHAR(500) NOT NULL,
|
|
category ENUM('AKADEMIK', 'NON_AKADEMIK', 'SARPRAS_LAINNYA', 'HUMAS') NOT NULL,
|
|
extracurricular_branch VARCHAR(255),
|
|
requester_name VARCHAR(255) NOT NULL,
|
|
requester_id VARCHAR(50) NOT NULL,
|
|
background TEXT,
|
|
purpose TEXT,
|
|
execution_date DATE NOT NULL,
|
|
mentors JSON,
|
|
participants JSON,
|
|
rab JSON,
|
|
total_requested DECIMAL(15,2) DEFAULT 0,
|
|
total_approved DECIMAL(15,2) DEFAULT 0,
|
|
status ENUM(
|
|
'DRAFT',
|
|
'PENDING_WAKA',
|
|
'REVISI_WAKA',
|
|
'PENDING_KS',
|
|
'REVISI_KEPSEK',
|
|
'REJECTED_KS',
|
|
'PENDING_KOMITE',
|
|
'APPROVED_PARTIAL',
|
|
'APPROVED_FULL',
|
|
'REJECTED_KOMITE',
|
|
'READY_TO_DISBURSE',
|
|
'DISBURSED',
|
|
'PENDING_LPJ',
|
|
'COMPLETED'
|
|
) NOT NULL,
|
|
attachments JSON,
|
|
lpj_url TEXT,
|
|
lpj_data JSON,
|
|
notes TEXT,
|
|
revision_history JSON,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
INDEX idx_requester_id (requester_id),
|
|
INDEX idx_status (status),
|
|
INDEX idx_category (category),
|
|
INDEX idx_created_at (created_at),
|
|
CONSTRAINT fk_requester FOREIGN KEY (requester_id) REFERENCES users(id) ON DELETE RESTRICT
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- ============================================
|
|
-- Table: settings
|
|
-- ============================================
|
|
CREATE TABLE IF NOT EXISTS settings (
|
|
setting_key VARCHAR(100) PRIMARY KEY,
|
|
setting_value TEXT,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
|
|
|
-- ============================================
|
|
-- Insert Default Settings
|
|
-- ============================================
|
|
INSERT INTO settings (setting_key, setting_value) VALUES
|
|
('academic_year', '2024/2025')
|
|
ON DUPLICATE KEY UPDATE setting_value = setting_value;
|
|
|
|
-- ============================================
|
|
-- Success Message
|
|
-- ============================================
|
|
SELECT 'Database schema created successfully!' AS message;
|