145 lines
4.4 KiB
PHP
145 lines
4.4 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace App;
|
|
|
|
final class BaseSchema
|
|
{
|
|
public static function ensure(\PDO $pdo): void
|
|
{
|
|
$driver = (string)$pdo->getAttribute(\PDO::ATTR_DRIVER_NAME);
|
|
if ($driver === 'pgsql') {
|
|
self::ensurePgsql($pdo);
|
|
return;
|
|
}
|
|
if ($driver === 'sqlite') {
|
|
self::ensureSqlite($pdo);
|
|
return;
|
|
}
|
|
self::ensureGeneric($pdo);
|
|
}
|
|
|
|
private static function ensurePgsql(\PDO $pdo): void
|
|
{
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_modules (
|
|
name TEXT PRIMARY KEY,
|
|
title TEXT,
|
|
version TEXT,
|
|
enabled BOOLEAN NOT NULL DEFAULT false,
|
|
installed_at TIMESTAMPTZ,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_module_settings (
|
|
name TEXT PRIMARY KEY,
|
|
settings TEXT NOT NULL DEFAULT '{}',
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_settings (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT,
|
|
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_users (
|
|
id BIGSERIAL PRIMARY KEY,
|
|
email TEXT NOT NULL UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
role TEXT NOT NULL DEFAULT 'user',
|
|
is_active BOOLEAN NOT NULL DEFAULT true,
|
|
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
|
)"
|
|
);
|
|
}
|
|
|
|
private static function ensureSqlite(\PDO $pdo): void
|
|
{
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_modules (
|
|
name TEXT PRIMARY KEY,
|
|
title TEXT,
|
|
version TEXT,
|
|
enabled INTEGER NOT NULL DEFAULT 0,
|
|
installed_at TEXT,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_module_settings (
|
|
name TEXT PRIMARY KEY,
|
|
settings TEXT NOT NULL DEFAULT '{}',
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_settings (
|
|
key TEXT PRIMARY KEY,
|
|
value TEXT,
|
|
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_users (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
email TEXT NOT NULL UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
role TEXT NOT NULL DEFAULT 'user',
|
|
is_active INTEGER NOT NULL DEFAULT 1,
|
|
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
)"
|
|
);
|
|
}
|
|
|
|
private static function ensureGeneric(\PDO $pdo): void
|
|
{
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_modules (
|
|
name VARCHAR(190) PRIMARY KEY,
|
|
title VARCHAR(190),
|
|
version VARCHAR(64),
|
|
enabled TINYINT NOT NULL DEFAULT 0,
|
|
installed_at DATETIME,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_module_settings (
|
|
name VARCHAR(190) PRIMARY KEY,
|
|
settings TEXT NOT NULL,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_settings (
|
|
`key` VARCHAR(190) PRIMARY KEY,
|
|
`value` TEXT,
|
|
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
)"
|
|
);
|
|
|
|
$pdo->exec(
|
|
"CREATE TABLE IF NOT EXISTS nexus_users (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
email VARCHAR(190) NOT NULL UNIQUE,
|
|
password_hash TEXT NOT NULL,
|
|
role VARCHAR(32) NOT NULL DEFAULT 'user',
|
|
is_active TINYINT NOT NULL DEFAULT 1,
|
|
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
|
|
)"
|
|
);
|
|
}
|
|
}
|