bak
This commit is contained in:
commit
e85b5203cd
15 files changed
+2779
No files matched your search
@@ -0,0 +1,72 @@
|
||||
<?php
|
||||
|
||||
class Database
|
||||
{
|
||||
private static ?PDO $pdo = null;
|
||||
|
||||
public static function connect(): PDO
|
||||
{
|
||||
if (self::$pdo === null) {
|
||||
$dir = dirname(DB_PATH);
|
||||
if (!is_dir($dir)) {
|
||||
mkdir($dir, 0755, true);
|
||||
}
|
||||
|
||||
self::$pdo = new PDO('sqlite:' . DB_PATH, null, null, [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
]);
|
||||
|
||||
self::$pdo->exec('PRAGMA journal_mode = WAL');
|
||||
self::$pdo->exec('PRAGMA foreign_keys = ON');
|
||||
|
||||
self::migrate();
|
||||
}
|
||||
|
||||
return self::$pdo;
|
||||
}
|
||||
|
||||
private static function migrate(): void
|
||||
{
|
||||
self::$pdo->exec('
|
||||
CREATE TABLE IF NOT EXISTS settings (
|
||||
key TEXT PRIMARY KEY,
|
||||
value TEXT NOT NULL
|
||||
)
|
||||
');
|
||||
|
||||
self::$pdo->exec('
|
||||
CREATE TABLE IF NOT EXISTS buckets (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
name TEXT NOT NULL,
|
||||
position INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
');
|
||||
|
||||
self::$pdo->exec('
|
||||
CREATE TABLE IF NOT EXISTS cards (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
title TEXT NOT NULL,
|
||||
body TEXT NOT NULL DEFAULT "",
|
||||
color TEXT NOT NULL DEFAULT "#ffffff",
|
||||
bucket_id INTEGER DEFAULT NULL,
|
||||
position INTEGER NOT NULL DEFAULT 0,
|
||||
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (bucket_id) REFERENCES buckets(id) ON DELETE SET NULL
|
||||
)
|
||||
');
|
||||
|
||||
// Migrations for existing installs
|
||||
$cols = self::$pdo->query('PRAGMA table_info(cards)')->fetchAll();
|
||||
$colNames = array_column($cols, 'name');
|
||||
|
||||
if (!in_array('bucket_id', $colNames)) {
|
||||
self::$pdo->exec('ALTER TABLE cards ADD COLUMN bucket_id INTEGER DEFAULT NULL REFERENCES buckets(id) ON DELETE SET NULL');
|
||||
}
|
||||
if (!in_array('parent_id', $colNames)) {
|
||||
self::$pdo->exec('ALTER TABLE cards ADD COLUMN parent_id INTEGER DEFAULT NULL REFERENCES cards(id) ON DELETE SET NULL');
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
require_once __DIR__ . '/../config.php';
|
||||
require_once __DIR__ . '/Database.php';
|
||||
|
||||
// Ensure data directory is writable
|
||||
$dataDir = dirname(DB_PATH);
|
||||
if (!is_writable($dataDir) && is_dir($dataDir)) {
|
||||
http_response_code(500);
|
||||
echo 'Data directory is not writable: ' . $dataDir;
|
||||
exit(1);
|
||||
}
|
||||
Reference in new issue
Block a user