39065-vm/includes/db_init.php
2026-03-09 14:12:06 +00:00

102 lines
3.6 KiB
PHP

<?php
declare(strict_types=1);
require_once __DIR__ . '/../db/config.php';
if (!function_exists('ensure_schema')) {
function ensure_schema(): void {
$pdo = db();
$pdo->exec("
CREATE TABLE IF NOT EXISTS departments (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
code VARCHAR(20) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");
$pdo->exec("
CREATE TABLE IF NOT EXISTS positions (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(120) NOT NULL,
level VARCHAR(60) DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");
$pdo->exec("
CREATE TABLE IF NOT EXISTS employees (
id INT AUTO_INCREMENT PRIMARY KEY,
employee_code VARCHAR(30) NOT NULL,
full_name VARCHAR(160) NOT NULL,
email VARCHAR(160) DEFAULT NULL,
phone VARCHAR(40) DEFAULT NULL,
status VARCHAR(40) NOT NULL DEFAULT 'Aktif',
employment_type VARCHAR(60) DEFAULT 'Kontrak',
hire_date DATE DEFAULT NULL,
dept_id INT DEFAULT NULL,
position_id INT DEFAULT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
INDEX idx_dept (dept_id),
INDEX idx_position (position_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
");
}
}
if (!function_exists('seed_demo_data')) {
function seed_demo_data(): void {
$pdo = db();
$deptCount = (int)$pdo->query("SELECT COUNT(*) FROM departments")->fetchColumn();
if ($deptCount === 0) {
$stmt = $pdo->prepare("INSERT INTO departments (name, code) VALUES (?, ?)");
$rows = [
['HR & People Ops', 'HR'],
['Finance', 'FIN'],
['Technology', 'TECH'],
['Operations', 'OPS'],
];
foreach ($rows as $row) {
$stmt->execute($row);
}
}
$posCount = (int)$pdo->query("SELECT COUNT(*) FROM positions")->fetchColumn();
if ($posCount === 0) {
$stmt = $pdo->prepare("INSERT INTO positions (name, level) VALUES (?, ?)");
$rows = [
['HR Manager', 'Lead'],
['Recruiter', 'Staff'],
['Software Engineer', 'Staff'],
['Finance Analyst', 'Staff'],
];
foreach ($rows as $row) {
$stmt->execute($row);
}
}
$empCount = (int)$pdo->query("SELECT COUNT(*) FROM employees")->fetchColumn();
if ($empCount === 0) {
$deptMap = $pdo->query("SELECT id, code FROM departments")->fetchAll(PDO::FETCH_KEY_PAIR);
$posMap = $pdo->query("SELECT id, name FROM positions")->fetchAll(PDO::FETCH_KEY_PAIR);
$stmt = $pdo->prepare("
INSERT INTO employees (employee_code, full_name, email, phone, status, employment_type, hire_date, dept_id, position_id)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)
");
$samples = [
['EMP-001', 'Anisa Putri', 'anisa@company.id', '0812-100-200', 'Aktif', 'Kontrak', '2024-05-10', $deptMap['HR'], $posMap['HR Manager']],
['EMP-002', 'Rafi Nugraha', 'rafi@company.id', '0812-301-222', 'Aktif', 'Tetap', '2023-11-02', $deptMap['TECH'], $posMap['Software Engineer']],
['EMP-003', 'Sinta Rahma', 'sinta@company.id', '0813-403-900', 'Probation', 'Kontrak', '2025-01-08', $deptMap['OPS'], $posMap['Recruiter']],
['EMP-004', 'Dimas Prakoso', 'dimas@company.id', '0812-112-555', 'Aktif', 'Tetap', '2022-06-19', $deptMap['FIN'], $posMap['Finance Analyst']],
];
foreach ($samples as $row) {
$stmt->execute($row);
}
}
}
}
ensure_schema();
seed_demo_data();