|
|
|
@ -58,58 +58,69 @@ class Database {
|
|
|
|
|
*/
|
|
|
|
|
private function checkAndCreateTables() {
|
|
|
|
|
// Create tables
|
|
|
|
|
$usersTableQuery = "CREATE TABLE IF NOT EXISTS users (
|
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
username VARCHAR(50) NOT NULL,
|
|
|
|
|
email VARCHAR(100) NOT NULL UNIQUE,
|
|
|
|
|
password VARCHAR(255) NOT NULL,
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
|
|
$usersTableQuery = "CREATE TABLE IF NOT EXISTS Users (
|
|
|
|
|
User_ID INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
Username VARCHAR(50) NOT NULL,
|
|
|
|
|
Email VARCHAR(100) NOT NULL UNIQUE,
|
|
|
|
|
Password VARCHAR(255) NOT NULL,
|
|
|
|
|
Created_At TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
|
|
|
) ENGINE=InnoDB;";
|
|
|
|
|
|
|
|
|
|
if (!$this->connection->query($usersTableQuery)) {
|
|
|
|
|
if (!$this->connection->query($UsersTableQuery)) {
|
|
|
|
|
die("Failed to create users table: " . $this->connection->error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$journalTableQuery = "CREATE TABLE IF NOT EXISTS journal (
|
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
year INT NOT NULL,
|
|
|
|
|
user_id INT NOT NULL,
|
|
|
|
|
$journalTableQuery = "CREATE TABLE IF NOT EXISTS Journal (
|
|
|
|
|
Journal_ID INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
Year INT NOT NULL,
|
|
|
|
|
User_ID INT NOT NULL,
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
|
|
|
|
|
FOREIGN KEY (User_ID) REFERENCES Users(User_ID) ON DELETE CASCADE
|
|
|
|
|
) ENGINE=InnoDB;";
|
|
|
|
|
|
|
|
|
|
if (!$this->connection->query($usersTableQuery)) {
|
|
|
|
|
if (!$this->connection->query($JournalTableQuery)) {
|
|
|
|
|
die("Failed to create journal table: " . $this->connection->error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$challengesTableQuery = "CREATE TABLE IF NOT EXISTS challenges (
|
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
journal_id INT NOT NULL,
|
|
|
|
|
booksgoal INT NOT NULL,
|
|
|
|
|
$challengesTableQuery = "CREATE TABLE IF NOT EXISTS Challenge (
|
|
|
|
|
Challenge_ID INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
Journal_ID INT NOT NULL,
|
|
|
|
|
Books_Goal INT NOT NULL,
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
FOREIGN KEY (journal_id) REFERENCES journal(id) ON DELETE CASCADE
|
|
|
|
|
FOREIGN KEY (Journal_ID) REFERENCES Journal(Journal_ID) ON DELETE CASCADE
|
|
|
|
|
) ENGINE=InnoDB;";
|
|
|
|
|
|
|
|
|
|
if (!$this->connection->query($usersTableQuery)) {
|
|
|
|
|
if (!$this->connection->query($ChallengeTableQuery)) {
|
|
|
|
|
die("Failed to create challenges table: " . $this->connection->error);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
$bookrecordsTableQuery = "CREATE TABLE IF NOT EXISTS bookrecords (
|
|
|
|
|
id INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
journal_id INT NOT NULL,
|
|
|
|
|
author VARCHAR(128) NOT NULL,
|
|
|
|
|
name VARCHAR(128) NOT NULL,
|
|
|
|
|
page_count INT NOT NULL,
|
|
|
|
|
status ENUM('tbr', 'reading', 'read'),
|
|
|
|
|
favorite BOOLEAN DEFAULT FALSE NOT NULL,
|
|
|
|
|
finished TIMESTAMP NULL,
|
|
|
|
|
genre varchar(32) NOT NULL,
|
|
|
|
|
placement TINYINT NULL CHECK (placement BETWEEN 1 AND 12)
|
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
|
FOREIGN KEY (journal_id) REFERENCES journal(id) ON DELETE CASCADE
|
|
|
|
|
) ENGINE=InnoDB;";
|
|
|
|
|
|
|
|
|
|
if (!$this->connection->query($usersTableQuery)) {
|
|
|
|
|
$bookrecordsTableQuery = "CREATE TABLE IF NOT EXISTS BookRecords (
|
|
|
|
|
Record_ID INT AUTO_INCREMENT PRIMARY KEY,
|
|
|
|
|
Journal_ID INT NOT NULL,
|
|
|
|
|
User_ID INT NOT NULL,
|
|
|
|
|
Author VARCHAR(128) NOT NULL,
|
|
|
|
|
Name VARCHAR(128) NOT NULL,
|
|
|
|
|
Length INT NOT NULL,
|
|
|
|
|
Status ENUM('TBR', 'Reading', 'Read') NOT NULL,
|
|
|
|
|
Favourite TINYINT,
|
|
|
|
|
Finished DATE NULL,
|
|
|
|
|
Genre ENUM(
|
|
|
|
|
'Adventure', 'Science Fiction', 'Fantasy', 'Mystery', 'Thriller', 'Horror',
|
|
|
|
|
'Romance', 'Historical Fiction', 'Dystopian', 'Crime', 'Contemporary Fiction',
|
|
|
|
|
'Magical Realism', 'Paranormal', 'Literary Fiction', 'True Crime',
|
|
|
|
|
'Young Adult (YA)', 'New Adult (NA)', 'Children''s Fiction', 'Military Fiction',
|
|
|
|
|
'Western', 'Coming of Age', 'Political Fiction', 'LGBTQ+ Fiction'
|
|
|
|
|
) NOT NULL,
|
|
|
|
|
Placement TINYINT NULL,
|
|
|
|
|
Placement2month TINYINT NULL,
|
|
|
|
|
Placement_Semifinals TINYINT NULL,
|
|
|
|
|
Placement_Finals TINYINT NULL,
|
|
|
|
|
Winner TINYINT NULL,
|
|
|
|
|
FOREIGN KEY (Journal_ID) REFERENCES Journal(Journal_ID) ON DELETE CASCADE,
|
|
|
|
|
FOREIGN KEY (User_ID) REFERENCES Users(User_ID) ON DELETE CASCADE
|
|
|
|
|
) ENGINE=InnoDB;";
|
|
|
|
|
|
|
|
|
|
if (!$this->connection->query($BookRecordsTableQuery)) {
|
|
|
|
|
die("Failed to create bookrecords table: " . $this->connection->error);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|