131 lines
4.3 KiB
SQL
131 lines
4.3 KiB
SQL
CREATE DATABASE vintagecoding;
|
|
USE vintagecoding;
|
|
|
|
CREATE TABLE roles (
|
|
role_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
role VARCHAR(16) NOT NULL
|
|
);
|
|
|
|
INSERT INTO roles (role)
|
|
VALUES ('owner'), ('developer'), ('user');
|
|
|
|
CREATE TABLE user (
|
|
user_id INT PRIMARY KEY,
|
|
username VARCHAR(32) NOT NULL UNIQUE,
|
|
email VARCHAR(64) NOT NULL UNIQUE,
|
|
password_hash VARCHAR(256) NOT NULL,
|
|
role_id INT NOT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
last_active TIMESTAMP DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
|
|
is_active BOOLEAN DEFAULT FALSE,
|
|
profile_picture VARCHAR(256),
|
|
bio VARCHAR(256),
|
|
website VARCHAR(64),
|
|
FOREIGN KEY (role_id) REFERENCES roles (role_id) ON DELETE CASCADE
|
|
);
|
|
|
|
INSERT INTO user (user_id, username, email, password_hash, role_id, profile_picture)
|
|
VALUES (1, 'quaxlyqueen', 'me@joshashton.dev', '057ba03d6c44104863dc7361fe4578965d1887360f90a0895882e58a6248fc86', 1, '2025.jpg');
|
|
|
|
CREATE TABLE remember_user (
|
|
token VARCHAR(128) PRIMARY KEY,
|
|
user_id INT NOT NULL,
|
|
remote_addr VARCHAR(64) NOT NULL,
|
|
http_forward VARCHAR(64),
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE
|
|
); -- TODO: Need cron job to auto-delete after 30 days of inactivity
|
|
|
|
CREATE TABLE post_types (
|
|
post_type_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
post_type VARCHAR(16)
|
|
);
|
|
|
|
INSERT INTO post_types (post_type)
|
|
VALUES ('article'), ('moment'), ('thought');
|
|
|
|
CREATE TABLE post (
|
|
post_id INT PRIMARY KEY,
|
|
author_id INT NOT NULL,
|
|
post_type INT NOT NULL,
|
|
title VARCHAR(26) NOT NULL,
|
|
slug VARCHAR(32),
|
|
read_count INT DEFAULT 0,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
published_at TIMESTAMP DEFAULT NULL,
|
|
published BOOLEAN DEFAULT TRUE,
|
|
excerpt VARCHAR(256),
|
|
FOREIGN KEY (author_id) REFERENCES user(user_id) ON DELETE CASCADE,
|
|
FOREIGN KEY (post_type) REFERENCES post_types(post_type_id)
|
|
);
|
|
|
|
INSERT INTO post (author_id, post_type, title, excerpt, published_at)
|
|
VALUES (1, 1, 'Building vintagecoding.net', 'A devlog of the creation of vintagecoding.net and a test at the formatting of post cards and posts. Let the great experiment begin!', CURRENT_TIMESTAMP);
|
|
|
|
CREATE TABLE categories (
|
|
category_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
category VARCHAR(16) NOT NULL
|
|
);
|
|
|
|
INSERT INTO categories (category)
|
|
VALUES ('web-dev'), ('devlog');
|
|
|
|
CREATE TABLE post_categories (
|
|
post_id INT NOT NULL,
|
|
category_id INT NOT NULL,
|
|
PRIMARY KEY (post_id, category_id),
|
|
FOREIGN KEY (post_id) REFERENCES post(post_id) ON DELETE CASCADE,
|
|
FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE CASCADE
|
|
);
|
|
|
|
INSERT INTO post_tags (post_id, tag_id) VALUES (1, 1), (1, 2);
|
|
|
|
CREATE TABLE follows (
|
|
follower_user_id INT NOT NULL,
|
|
following_user_id INT NOT NULL,
|
|
notify_user BOOLEAN DEFAULT FALSE,
|
|
followed_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (follower_user_id, following_user_id),
|
|
FOREIGN KEY (follower_user_id) REFERENCES user(user_id) ON DELETE CASCADE,
|
|
FOREIGN KEY (following_user_id) REFERENCES user(user_id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE space_types (
|
|
space_type_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
space_type VARCHAR(16)
|
|
);
|
|
|
|
INSERT INTO space_types (space_type)
|
|
VALUES ('open', 'public', 'shared', 'private');
|
|
|
|
CREATE TABLE spaces (
|
|
space_id INT PRIMARY KEY AUTO_INCREMENT,
|
|
space_type INT NOT NULL,
|
|
name VARCHAR(64) NOT NULL,
|
|
slug VARCHAR(64) UNIQUE,
|
|
description TEXT,
|
|
parent_space_id INT DEFAULT NULL,
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
|
FOREIGN KEY (parent_space_id) REFERENCES spaces(space_id) ON DELETE SET NULL,
|
|
FOREIGN KEY (space_type) REFERENCES space_types(space_type_id)
|
|
);
|
|
|
|
CREATE TABLE space_posts (
|
|
post_id INT NOT NULL,
|
|
space_id INT NOT NULL,
|
|
PRIMARY KEY (post_id, space_id),
|
|
FOREIGN KEY (post_id) REFERENCES post(post_id) ON DELETE CASCADE,
|
|
FOREIGN KEY (space_id) REFERENCES spaces(space_id) ON DELETE CASCADE
|
|
);
|
|
|
|
CREATE TABLE space_members (
|
|
space_id INT NOT NULL,
|
|
user_id INT NOT NULL,
|
|
added_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
PRIMARY KEY (space_id, user_id),
|
|
FOREIGN KEY (space_id) REFERENCES spaces(space_id) ON DELETE CASCADE,
|
|
FOREIGN KEY (user_id) REFERENCES user(user_id) ON DELETE CASCADE
|
|
);
|