add backend

This commit is contained in:
yoyuzh
2026-03-14 11:03:07 +08:00
parent d993d3f943
commit 8db2fa2aab
130 changed files with 15152 additions and 11861 deletions

View File

@@ -0,0 +1,54 @@
CREATE DATABASE IF NOT EXISTS yoyuzh_portal DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE yoyuzh_portal;
CREATE TABLE IF NOT EXISTS portal_user (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(64) NOT NULL,
email VARCHAR(128) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uk_portal_user_username UNIQUE (username),
CONSTRAINT uk_portal_user_email UNIQUE (email)
);
CREATE TABLE IF NOT EXISTS portal_file (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
filename VARCHAR(255) NOT NULL,
path VARCHAR(512) NOT NULL,
storage_name VARCHAR(255) NOT NULL,
content_type VARCHAR(255),
size BIGINT NOT NULL,
is_directory BIT NOT NULL DEFAULT b'0',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_portal_file_user FOREIGN KEY (user_id) REFERENCES portal_user (id),
CONSTRAINT uk_portal_file_user_path_name UNIQUE (user_id, path, filename)
);
CREATE TABLE IF NOT EXISTS portal_course (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
course_name VARCHAR(255) NOT NULL,
teacher VARCHAR(255),
classroom VARCHAR(255),
day_of_week INT,
start_time INT,
end_time INT,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_portal_course_user FOREIGN KEY (user_id) REFERENCES portal_user (id)
);
CREATE TABLE IF NOT EXISTS portal_grade (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
user_id BIGINT NOT NULL,
course_name VARCHAR(255) NOT NULL,
grade DOUBLE NOT NULL,
semester VARCHAR(64) NOT NULL,
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_portal_grade_user FOREIGN KEY (user_id) REFERENCES portal_user (id)
);
CREATE INDEX idx_user_created_at ON portal_user (created_at);
CREATE INDEX idx_file_created_at ON portal_file (created_at);
CREATE INDEX idx_course_user_created ON portal_course (user_id, created_at);
CREATE INDEX idx_grade_user_created ON portal_grade (user_id, created_at);

View File

@@ -0,0 +1,46 @@
CREATE TABLE IF NOT EXISTS portal_user (
id BIGSERIAL PRIMARY KEY,
username VARCHAR(64) NOT NULL UNIQUE,
email VARCHAR(128) NOT NULL UNIQUE,
password_hash VARCHAR(255) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS portal_file (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES portal_user (id),
filename VARCHAR(255) NOT NULL,
path VARCHAR(512) NOT NULL,
storage_name VARCHAR(255) NOT NULL,
content_type VARCHAR(255),
size BIGINT NOT NULL,
is_directory BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT uk_portal_file_user_path_name UNIQUE (user_id, path, filename)
);
CREATE TABLE IF NOT EXISTS portal_course (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES portal_user (id),
course_name VARCHAR(255) NOT NULL,
teacher VARCHAR(255),
classroom VARCHAR(255),
day_of_week INTEGER,
start_time INTEGER,
end_time INTEGER,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE IF NOT EXISTS portal_grade (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT NOT NULL REFERENCES portal_user (id),
course_name VARCHAR(255) NOT NULL,
grade DOUBLE PRECISION NOT NULL,
semester VARCHAR(64) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_user_created_at ON portal_user (created_at);
CREATE INDEX IF NOT EXISTS idx_file_created_at ON portal_file (created_at);
CREATE INDEX IF NOT EXISTS idx_course_user_created ON portal_course (user_id, created_at);
CREATE INDEX IF NOT EXISTS idx_grade_user_created ON portal_grade (user_id, created_at);