Files
smanab/e-proposal-komite/migrations/001_create_tables.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;