84 lines
3.5 KiB
PHP
84 lines
3.5 KiB
PHP
<?php
|
|
function getDbConnection() {
|
|
static $db = null;
|
|
if ($db === null) {
|
|
$host = getenv('DB_HOST') ?: 'mysql';
|
|
$dbname = getenv('DB_NAME') ?: 'neptune';
|
|
$user = getenv('DB_USER') ?: 'neptune';
|
|
$pass = getenv('DB_PASS') ?: 'neptune_pass';
|
|
$db = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass, [
|
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
|
|
]);
|
|
migrate($db);
|
|
}
|
|
return $db;
|
|
}
|
|
|
|
function migrate($db) {
|
|
try { $db->exec("CREATE TABLE IF NOT EXISTS documents (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
doc_type VARCHAR(50) NOT NULL,
|
|
team_id INT NOT NULL,
|
|
title VARCHAR(255) NOT NULL,
|
|
content TEXT,
|
|
occurred_at DATETIME NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
|
)"); } catch (Exception $e) {}
|
|
try { $db->exec("ALTER TABLE documents ADD COLUMN IF NOT EXISTS updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP AFTER created_at"); } catch (Exception $e) {}
|
|
$db->exec("CREATE TABLE IF NOT EXISTS network_shapes (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
label VARCHAR(255) NOT NULL DEFAULT '',
|
|
shape_type ENUM('rectangle','ellipse','zone') DEFAULT 'rectangle',
|
|
pos_x FLOAT DEFAULT 0,
|
|
pos_y FLOAT DEFAULT 0,
|
|
width FLOAT DEFAULT 200,
|
|
height FLOAT DEFAULT 150,
|
|
color VARCHAR(7) DEFAULT '#1e3a5f',
|
|
border_color VARCHAR(7) DEFAULT '#3b82f6',
|
|
opacity FLOAT DEFAULT 0.15,
|
|
z_index INT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)");
|
|
$db->exec("CREATE TABLE IF NOT EXISTS neptune_users (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
user_token VARCHAR(255) NOT NULL UNIQUE,
|
|
username VARCHAR(255) NOT NULL,
|
|
email VARCHAR(255) DEFAULT '',
|
|
role ENUM('admin','user') DEFAULT 'user',
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)");
|
|
try {
|
|
$rootDb = new PDO("mysql:host=" . (getenv('DB_HOST') ?: 'mysql') . ";charset=utf8mb4", 'root', getenv('MYSQL_ROOT_PASSWORD') ?: 'neptune_root_pass');
|
|
$rootDb->exec("ALTER TABLE neptune.network_nodes ADD COLUMN IF NOT EXISTS notes VARCHAR(1000) DEFAULT '' AFTER group_name");
|
|
} catch (Exception $e) {
|
|
}
|
|
$db->exec("CREATE TABLE IF NOT EXISTS neptune_settings (
|
|
setting_key VARCHAR(100) PRIMARY KEY,
|
|
setting_value TEXT NOT NULL
|
|
)");
|
|
try { $db->exec("CREATE TABLE IF NOT EXISTS file_attachments (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
event_id INT NOT NULL,
|
|
original_name VARCHAR(255) NOT NULL,
|
|
stored_name VARCHAR(255) NOT NULL,
|
|
mime_type VARCHAR(100),
|
|
file_size INT,
|
|
uploaded_by VARCHAR(100),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
)"); } catch (Exception $e) {}
|
|
try { $db->exec("CREATE TABLE IF NOT EXISTS event_tags (
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
event_id INT NOT NULL,
|
|
tag VARCHAR(50) NOT NULL,
|
|
UNIQUE KEY unique_event_tag (event_id, tag)
|
|
)"); } catch (Exception $e) {}
|
|
try {
|
|
$stmt = $db->prepare("SELECT COUNT(*) as c FROM neptune_settings WHERE setting_key = 'registration_enabled'");
|
|
$stmt->execute();
|
|
if ($stmt->fetch()['c'] == 0) {
|
|
$db->exec("INSERT INTO neptune_settings (setting_key, setting_value) VALUES ('registration_enabled', '1')");
|
|
}
|
|
} catch (Exception $e) {}
|
|
} |