-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathd1_init_single.sql
More file actions
108 lines (100 loc) · 4.27 KB
/
Copy pathd1_init_single.sql
File metadata and controls
108 lines (100 loc) · 4.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
-- 一次性执行的完整数据库初始化脚本
-- 可以直接复制粘贴到 Cloudflare D1 控制台中执行
-- 创建用户表
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
hashed_password TEXT NOT NULL,
user_uuid TEXT UNIQUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);
-- 创建订阅源表
CREATE TABLE IF NOT EXISTS subscription_sources (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
source_name TEXT NOT NULL,
source_url TEXT NOT NULL,
fetch_status TEXT DEFAULT 'pending',
node_count INTEGER DEFAULT 0,
last_fetch_at DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
-- 创建节点池表
CREATE TABLE IF NOT EXISTS node_pool (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
source_id INTEGER,
node_url TEXT NOT NULL,
node_hash TEXT,
status TEXT DEFAULT 'untested',
last_test_at DATETIME,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
FOREIGN KEY (source_id) REFERENCES subscription_sources (id) ON DELETE CASCADE,
UNIQUE(user_id, node_hash)
);
-- 创建订阅表
CREATE TABLE IF NOT EXISTS subscriptions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
uuid TEXT UNIQUE NOT NULL,
node_data_base64 TEXT,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
-- 创建标签表
CREATE TABLE IF NOT EXISTS tags (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
tag_name TEXT NOT NULL,
description TEXT DEFAULT '',
tag_uuid TEXT UNIQUE NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE,
UNIQUE(user_id, tag_name)
);
-- 创建节点标签映射表
CREATE TABLE IF NOT EXISTS node_tag_map (
id INTEGER PRIMARY KEY AUTOINCREMENT,
node_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (node_id) REFERENCES node_pool (id) ON DELETE CASCADE,
FOREIGN KEY (tag_id) REFERENCES tags (id) ON DELETE CASCADE,
UNIQUE(node_id, tag_id)
);
-- 创建源节点配置表
CREATE TABLE IF NOT EXISTS source_node_configs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER NOT NULL,
config_name TEXT NOT NULL,
node_type TEXT NOT NULL CHECK (node_type IN ('nat64', 'proxyip')),
config_data TEXT NOT NULL,
generated_node TEXT NOT NULL,
is_default BOOLEAN DEFAULT FALSE,
enabled BOOLEAN DEFAULT TRUE,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE CASCADE
);
-- 创建索引
CREATE INDEX IF NOT EXISTS idx_users_username ON users(username);
CREATE INDEX IF NOT EXISTS idx_users_uuid ON users(user_uuid);
CREATE INDEX IF NOT EXISTS idx_subscription_sources_user_id ON subscription_sources(user_id);
CREATE INDEX IF NOT EXISTS idx_subscription_sources_status ON subscription_sources(fetch_status);
CREATE INDEX IF NOT EXISTS idx_node_pool_user_id ON node_pool(user_id);
CREATE INDEX IF NOT EXISTS idx_node_pool_source_id ON node_pool(source_id);
CREATE INDEX IF NOT EXISTS idx_node_pool_status ON node_pool(status);
CREATE INDEX IF NOT EXISTS idx_node_pool_hash ON node_pool(node_hash);
CREATE INDEX IF NOT EXISTS idx_subscriptions_user_id ON subscriptions(user_id);
CREATE INDEX IF NOT EXISTS idx_subscriptions_uuid ON subscriptions(uuid);
CREATE INDEX IF NOT EXISTS idx_tags_user_id ON tags(user_id);
CREATE INDEX IF NOT EXISTS idx_tags_uuid ON tags(tag_uuid);
CREATE INDEX IF NOT EXISTS idx_node_tag_map_node_id ON node_tag_map(node_id);
CREATE INDEX IF NOT EXISTS idx_node_tag_map_tag_id ON node_tag_map(tag_id);
CREATE INDEX IF NOT EXISTS idx_source_node_configs_user_id ON source_node_configs(user_id);
CREATE INDEX IF NOT EXISTS idx_source_node_configs_type ON source_node_configs(node_type);
CREATE INDEX IF NOT EXISTS idx_source_node_configs_default ON source_node_configs(is_default);