diff --git a/db.php b/db.php index 248cab1..dc99222 100644 --- a/db.php +++ b/db.php @@ -30,8 +30,10 @@ function getDb(): PDO { function initDatabase(): void { $db = getDb(); - $db->exec(" - CREATE TABLE IF NOT EXISTS companies ( + + // Jokainen CREATE TABLE omana exec()-kutsuna — MySQL/PDO ei tue useaa lausetta kerralla + $tables = [ + "CREATE TABLE IF NOT EXISTS companies ( id VARCHAR(50) PRIMARY KEY, nimi VARCHAR(255) NOT NULL, luotu DATETIME, @@ -41,17 +43,17 @@ function initDatabase(): void { logo_file VARCHAR(255) DEFAULT '', api_key VARCHAR(64) DEFAULT '', cors_origins TEXT DEFAULT '' - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS company_domains ( + "CREATE TABLE IF NOT EXISTS company_domains ( id INT AUTO_INCREMENT PRIMARY KEY, company_id VARCHAR(50) NOT NULL, domain VARCHAR(255) NOT NULL, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, UNIQUE KEY udx_domain (domain) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS users ( + "CREATE TABLE IF NOT EXISTS users ( id VARCHAR(20) PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL, @@ -59,46 +61,46 @@ function initDatabase(): void { role ENUM('admin','user') DEFAULT 'user', email VARCHAR(255) DEFAULT '', luotu DATETIME - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS user_companies ( + "CREATE TABLE IF NOT EXISTS user_companies ( user_id VARCHAR(20) NOT NULL, company_id VARCHAR(50) NOT NULL, PRIMARY KEY (user_id, company_id), FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE - ) ENGINE=InnoDB; + ) ENGINE=InnoDB", - CREATE TABLE IF NOT EXISTS user_signatures ( + "CREATE TABLE IF NOT EXISTS user_signatures ( id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(20) NOT NULL, mailbox_id VARCHAR(20) NOT NULL, signature TEXT, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE, UNIQUE KEY udx_user_mailbox (user_id, mailbox_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS config ( + "CREATE TABLE IF NOT EXISTS config ( config_key VARCHAR(100) PRIMARY KEY, config_value TEXT - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS reset_tokens ( + "CREATE TABLE IF NOT EXISTS reset_tokens ( id INT AUTO_INCREMENT PRIMARY KEY, user_id VARCHAR(20) NOT NULL, token VARCHAR(64) NOT NULL UNIQUE, created_at DATETIME NOT NULL, FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE - ) ENGINE=InnoDB; + ) ENGINE=InnoDB", - CREATE TABLE IF NOT EXISTS login_attempts ( + "CREATE TABLE IF NOT EXISTS login_attempts ( id INT AUTO_INCREMENT PRIMARY KEY, ip VARCHAR(45) NOT NULL, attempted_at DATETIME NOT NULL, INDEX idx_ip_time (ip, attempted_at) - ) ENGINE=InnoDB; + ) ENGINE=InnoDB", - CREATE TABLE IF NOT EXISTS customers ( + "CREATE TABLE IF NOT EXISTS customers ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, yritys VARCHAR(255), @@ -118,9 +120,9 @@ function initDatabase(): void { muokkaaja VARCHAR(100) DEFAULT '', FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company (company_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS customer_connections ( + "CREATE TABLE IF NOT EXISTS customer_connections ( id INT AUTO_INCREMENT PRIMARY KEY, customer_id VARCHAR(20) NOT NULL, asennusosoite VARCHAR(255) DEFAULT '', @@ -131,9 +133,9 @@ function initDatabase(): void { sopimuskausi VARCHAR(100) DEFAULT '', alkupvm VARCHAR(20) DEFAULT '', FOREIGN KEY (customer_id) REFERENCES customers(id) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS leads ( + "CREATE TABLE IF NOT EXISTS leads ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, yritys VARCHAR(255), @@ -150,9 +152,9 @@ function initDatabase(): void { muokkaaja VARCHAR(100) DEFAULT '', FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company (company_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS tickets ( + "CREATE TABLE IF NOT EXISTS tickets ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, subject VARCHAR(500), @@ -172,9 +174,9 @@ function initDatabase(): void { INDEX idx_company (company_id), INDEX idx_status (status), INDEX idx_message_id (message_id(255)) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS ticket_messages ( + "CREATE TABLE IF NOT EXISTS ticket_messages ( id VARCHAR(20) PRIMARY KEY, ticket_id VARCHAR(20) NOT NULL, type VARCHAR(20) NOT NULL, @@ -185,25 +187,25 @@ function initDatabase(): void { message_id VARCHAR(500) DEFAULT '', FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE, INDEX idx_ticket (ticket_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS ticket_tags ( + "CREATE TABLE IF NOT EXISTS ticket_tags ( ticket_id VARCHAR(20) NOT NULL, tag VARCHAR(100) NOT NULL, PRIMARY KEY (ticket_id, tag), FOREIGN KEY (ticket_id) REFERENCES tickets(id) ON DELETE CASCADE - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS archives ( + "CREATE TABLE IF NOT EXISTS archives ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, data JSON NOT NULL, archived_at DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company (company_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS changelog ( + "CREATE TABLE IF NOT EXISTS changelog ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, timestamp DATETIME NOT NULL, @@ -214,9 +216,9 @@ function initDatabase(): void { details TEXT, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company_time (company_id, timestamp) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS mailboxes ( + "CREATE TABLE IF NOT EXISTS mailboxes ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, nimi VARCHAR(255), @@ -230,9 +232,9 @@ function initDatabase(): void { aktiivinen BOOLEAN DEFAULT TRUE, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company (company_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS ticket_rules ( + "CREATE TABLE IF NOT EXISTS ticket_rules ( id VARCHAR(20) PRIMARY KEY, company_id VARCHAR(50) NOT NULL, name VARCHAR(255), @@ -245,9 +247,9 @@ function initDatabase(): void { auto_close_days INT DEFAULT 0, FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company (company_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", - CREATE TABLE IF NOT EXISTS files ( + "CREATE TABLE IF NOT EXISTS files ( id INT AUTO_INCREMENT PRIMARY KEY, company_id VARCHAR(50) NOT NULL, customer_id VARCHAR(20) NOT NULL, @@ -258,8 +260,16 @@ function initDatabase(): void { uploaded_by VARCHAR(100), FOREIGN KEY (company_id) REFERENCES companies(id) ON DELETE CASCADE, INDEX idx_company_customer (company_id, customer_id) - ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - "); + ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4", + ]; + + foreach ($tables as $i => $sql) { + try { + $db->exec($sql); + } catch (PDOException $e) { + throw new RuntimeException("Taulun luonti epäonnistui (taulu #" . ($i+1) . "): " . $e->getMessage()); + } + } } // ==================== YRITYKSET ====================