67 lines
2.6 KiB
PHP
67 lines
2.6 KiB
PHP
<?php
|
|
/**
|
|
* Diese Klasse legt einmalig beim allerersten Start in der exakt korrekten Reihenfolge die Tabellen an
|
|
*
|
|
* @author Niklas Ortmann
|
|
*/
|
|
class DatabaseInitializer {
|
|
public static function initialize($dbPath) {
|
|
if (!file_exists($dbPath)) {
|
|
try {
|
|
$db = new PDO('sqlite:' . $dbPath);
|
|
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
|
|
$db->exec('PRAGMA foreign_keys = ON;');
|
|
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS users (
|
|
email TEXT PRIMARY KEY,
|
|
vorname TEXT NOT NULL,
|
|
nachname TEXT NOT NULL,
|
|
password TEXT NOT NULL
|
|
);
|
|
");
|
|
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS articles (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
title TEXT,
|
|
content TEXT,
|
|
author TEXT,
|
|
category TEXT,
|
|
tags TEXT,
|
|
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (author) REFERENCES users(email) ON DELETE SET NULL ON UPDATE CASCADE
|
|
);
|
|
");
|
|
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS likes (
|
|
article_id INTEGER,
|
|
user_id TEXT,
|
|
PRIMARY KEY (article_id, user_id),
|
|
FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES users(email) ON DELETE CASCADE
|
|
);
|
|
");
|
|
|
|
$db->exec("
|
|
CREATE TABLE IF NOT EXISTS comments (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
article_id INTEGER NOT NULL,
|
|
parent_comment_id INTEGER NULL,
|
|
author TEXT NOT NULL,
|
|
content TEXT NOT NULL,
|
|
created TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (article_id) REFERENCES articles(id) ON DELETE CASCADE,
|
|
FOREIGN KEY (author) REFERENCES users(email) ON DELETE CASCADE,
|
|
FOREIGN KEY (parent_comment_id) REFERENCES comments(id) ON DELETE CASCADE
|
|
);
|
|
");
|
|
|
|
} catch (PDOException $e) {
|
|
throw new RuntimeException("internal-error");
|
|
}
|
|
}
|
|
}
|
|
}
|