Initial commit: PAR Server with Spring Boot 3.2, MyBatis-Plus, Flyway

This commit is contained in:
mediabot-pt
2026-06-29 10:43:24 +08:00
commit baa04b5138
60 changed files with 7043 additions and 0 deletions

View File

@@ -0,0 +1,142 @@
-- PAR (PT Adapter Registry) Database Schema - Phase 1
-- Flyway Migration V1: Initial schema creation
-- ----------------------------------------
-- 1. accounts: 用户账户表
-- ----------------------------------------
CREATE TABLE accounts (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
email VARCHAR(255) NOT NULL COMMENT '邮箱地址,唯一标识',
password_hash VARCHAR(255) NOT NULL COMMENT 'bcrypt 加密后的密码',
display_name VARCHAR(100) COMMENT '显示昵称',
trust_level TINYINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '信任等级: 0=member, 1=trusted, 2=admin',
is_active TINYINT(1) NOT NULL DEFAULT 1 COMMENT '是否启用: 1=启用, 0=禁用',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除: 1=已删除, 0=未删除',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_email (email),
KEY idx_trust_level (trust_level),
KEY idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户账户表';
-- ----------------------------------------
-- 2. sites: 站点元信息表
-- ----------------------------------------
CREATE TABLE sites (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
site_id VARCHAR(64) NOT NULL COMMENT '站点唯一标识,如 pthome',
name VARCHAR(200) NOT NULL COMMENT '站点显示名称',
description TEXT COMMENT '站点描述',
base_url VARCHAR(500) COMMENT '站点基础URL',
icon_url VARCHAR(500) COMMENT '站点图标URL',
site_type VARCHAR(50) NOT NULL DEFAULT 'private' COMMENT '站点类型: private/public/xxx',
schema_version VARCHAR(20) NOT NULL DEFAULT '1.0.0' COMMENT '当前生效的schema版本',
current_config_id BIGINT UNSIGNED COMMENT '当前生效的配置版本ID(site_configs.id)',
status VARCHAR(20) NOT NULL DEFAULT 'active' COMMENT '站点状态: active/pending/deprecated',
submitter_id BIGINT UNSIGNED COMMENT '首次提交者账户ID',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_site_id (site_id),
KEY idx_status (status),
KEY idx_deleted (deleted),
KEY idx_submitter (submitter_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站点元信息表';
-- ----------------------------------------
-- 3. site_configs: 站点配置版本表
-- ----------------------------------------
CREATE TABLE site_configs (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
site_id VARCHAR(64) NOT NULL COMMENT '关联站点标识',
version VARCHAR(20) NOT NULL COMMENT '配置版本号,如 1.2.3',
config_hash VARCHAR(64) NOT NULL COMMENT '配置内容SHA-256哈希(用于校验文件完整性)',
storage_path VARCHAR(500) NOT NULL COMMENT '静态文件存储路径(相对par.static.path)',
file_size INT UNSIGNED COMMENT '配置文件大小(字节)',
schema_version VARCHAR(20) NOT NULL DEFAULT '1.0.0' COMMENT 'Schema版本',
status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '状态: pending/approved/rejected/deprecated',
submitter_id BIGINT UNSIGNED COMMENT '提交者账户ID(null=匿名)',
reviewer_id BIGINT UNSIGNED COMMENT '审核者账户ID',
reviewed_at DATETIME COMMENT '审核时间',
review_comment TEXT COMMENT '审核意见',
is_latest TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否为当前最新版本: 1=是',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY uk_site_version (site_id, version),
KEY idx_site_id (site_id),
KEY idx_status (status),
KEY idx_is_latest (is_latest),
KEY idx_deleted (deleted),
KEY idx_submitter (submitter_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='站点配置版本表';
-- ----------------------------------------
-- 4. config_reviews: 配置/站点信息审核表
-- ----------------------------------------
CREATE TABLE config_reviews (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
review_type VARCHAR(20) NOT NULL COMMENT '审核类型: config/site_info',
target_id BIGINT UNSIGNED NOT NULL COMMENT '审核目标ID(site_configs.id 或 sites.id)',
site_id VARCHAR(64) NOT NULL COMMENT '关联站点标识',
action VARCHAR(20) NOT NULL COMMENT '操作类型: create/update/delete',
status VARCHAR(20) NOT NULL DEFAULT 'pending' COMMENT '审核状态: pending/approved/rejected',
submitter_id BIGINT UNSIGNED COMMENT '提交者账户ID',
reviewer_id BIGINT UNSIGNED COMMENT '审核者账户ID',
reviewed_at DATETIME COMMENT '审核完成时间',
review_comment TEXT COMMENT '审核意见',
payload_snapshot JSON COMMENT '提交时的完整内容快照(站点信息或配置摘要)',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_review_type (review_type),
KEY idx_target_id (target_id),
KEY idx_site_id (site_id),
KEY idx_status (status),
KEY idx_submitter (submitter_id),
KEY idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='配置及站点信息审核表';
-- ----------------------------------------
-- 5. anonymous_stats: 匿名使用统计表
-- ----------------------------------------
CREATE TABLE anonymous_stats (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
anonymous_id VARCHAR(64) NOT NULL COMMENT '匿名ID(邮箱SHA-256哈希前16位)',
raw_email_hash VARCHAR(64) NOT NULL COMMENT '邮箱完整SHA-256哈希(用于注册关联)',
first_seen_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '首次出现时间',
last_seen_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '最后活跃时间',
request_count BIGINT UNSIGNED NOT NULL DEFAULT 1 COMMENT '累计请求次数',
associated_account_id BIGINT UNSIGNED COMMENT '关联的注册账户ID(注册后回填)',
client_info VARCHAR(500) COMMENT '客户端信息(User-Agent等)',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
PRIMARY KEY (id),
UNIQUE KEY uk_anonymous_id (anonymous_id),
KEY idx_raw_hash (raw_email_hash),
KEY idx_associated (associated_account_id),
KEY idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='匿名使用统计表';
-- ----------------------------------------
-- 6. verification_codes: 邮箱验证码表
-- ----------------------------------------
CREATE TABLE verification_codes (
id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键',
email VARCHAR(255) NOT NULL COMMENT '目标邮箱',
code VARCHAR(10) NOT NULL COMMENT '验证码',
purpose VARCHAR(20) NOT NULL COMMENT '用途: reset_password/change_email',
expires_at DATETIME NOT NULL COMMENT '过期时间',
used_at DATETIME COMMENT '使用时间',
client_ip VARCHAR(45) COMMENT '请求IP',
deleted TINYINT(1) NOT NULL DEFAULT 0 COMMENT '逻辑删除',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
KEY idx_email (email),
KEY idx_code (code),
KEY idx_expires (expires_at),
KEY idx_deleted (deleted)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='邮箱验证码表';