mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-10-13 04:36:37 +08:00
Merge pull request #63 from Sagit-chu/fix/backend-schema-migration
fix(backend): ensure all tables exist on startup via schema.sql
This commit is contained in:
@@ -144,7 +144,7 @@ func Open(path string) (*Repository, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := ensurePeerSchema(db); err != nil {
|
if err := migrateSchema(db); err != nil {
|
||||||
_ = db.Close()
|
_ = db.Close()
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@@ -1222,33 +1222,14 @@ func bootstrapSchema(db *sql.DB) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func ensurePeerSchema(db *sql.DB) error {
|
func migrateSchema(db *sql.DB) error {
|
||||||
if db == nil {
|
if db == nil {
|
||||||
return errors.New("nil db")
|
return errors.New("nil db")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := db.Exec(`CREATE TABLE IF NOT EXISTS peer_share (
|
|
||||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
||||||
name TEXT NOT NULL,
|
|
||||||
node_id INTEGER NOT NULL,
|
|
||||||
token TEXT NOT NULL UNIQUE,
|
|
||||||
max_bandwidth INTEGER DEFAULT 0,
|
|
||||||
expiry_time INTEGER DEFAULT 0,
|
|
||||||
port_range_start INTEGER DEFAULT 0,
|
|
||||||
port_range_end INTEGER DEFAULT 0,
|
|
||||||
current_flow INTEGER DEFAULT 0,
|
|
||||||
is_active INTEGER DEFAULT 1,
|
|
||||||
created_time INTEGER NOT NULL,
|
|
||||||
updated_time INTEGER NOT NULL,
|
|
||||||
allowed_domains TEXT DEFAULT ''
|
|
||||||
)`)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("create peer_share: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add allowed_domains column if it doesn't exist (for existing tables)
|
// Add allowed_domains column if it doesn't exist (for existing tables)
|
||||||
var dummy interface{}
|
var dummy interface{}
|
||||||
err = db.QueryRow("SELECT allowed_domains FROM peer_share LIMIT 1").Scan(&dummy)
|
err := db.QueryRow("SELECT allowed_domains FROM peer_share LIMIT 1").Scan(&dummy)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if strings.Contains(err.Error(), "no such column") {
|
if strings.Contains(err.Error(), "no such column") {
|
||||||
_, err = db.Exec("ALTER TABLE peer_share ADD COLUMN allowed_domains TEXT DEFAULT ''")
|
_, err = db.Exec("ALTER TABLE peer_share ADD COLUMN allowed_domains TEXT DEFAULT ''")
|
||||||
|
|||||||
@@ -42,7 +42,11 @@ CREATE TABLE IF NOT EXISTS node (
|
|||||||
status INTEGER NOT NULL,
|
status INTEGER NOT NULL,
|
||||||
tcp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
tcp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
||||||
udp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
udp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
||||||
inx INTEGER NOT NULL DEFAULT 0
|
inx INTEGER NOT NULL DEFAULT 0,
|
||||||
|
is_remote INTEGER DEFAULT 0,
|
||||||
|
remote_url TEXT,
|
||||||
|
remote_token TEXT,
|
||||||
|
remote_config TEXT
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS speed_limit (
|
CREATE TABLE IF NOT EXISTS speed_limit (
|
||||||
@@ -181,3 +185,20 @@ CREATE TABLE IF NOT EXISTS vite_config (
|
|||||||
value VARCHAR(200) NOT NULL,
|
value VARCHAR(200) NOT NULL,
|
||||||
time INTEGER NOT NULL
|
time INTEGER NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS peer_share (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
node_id INTEGER NOT NULL,
|
||||||
|
token TEXT NOT NULL UNIQUE,
|
||||||
|
max_bandwidth INTEGER DEFAULT 0,
|
||||||
|
expiry_time INTEGER DEFAULT 0,
|
||||||
|
port_range_start INTEGER DEFAULT 0,
|
||||||
|
port_range_end INTEGER DEFAULT 0,
|
||||||
|
current_flow INTEGER DEFAULT 0,
|
||||||
|
is_active INTEGER DEFAULT 1,
|
||||||
|
created_time INTEGER NOT NULL,
|
||||||
|
updated_time INTEGER NOT NULL,
|
||||||
|
allowed_domains TEXT DEFAULT ''
|
||||||
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -82,6 +82,18 @@ export default function ProfilePage() {
|
|||||||
"bg-orange-100 dark:bg-orange-500/20 text-orange-600 dark:text-orange-400",
|
"bg-orange-100 dark:bg-orange-500/20 text-orange-600 dark:text-orange-400",
|
||||||
description: "管理用户限速策略",
|
description: "管理用户限速策略",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
path: "/panel-sharing",
|
||||||
|
label: "面板共享",
|
||||||
|
icon: (
|
||||||
|
<svg className="w-5 h-5" fill="currentColor" viewBox="0 0 20 20">
|
||||||
|
<path d="M15 8a3 3 0 10-2.977-2.63l-4.94 2.47a3 3 0 100 4.319l4.94 2.47a3 3 0 10.895-1.789l-4.94-2.47a3.027 3.027 0 000-.74l4.94-2.47C13.456 7.68 14.19 8 15 8z" />
|
||||||
|
</svg>
|
||||||
|
),
|
||||||
|
color:
|
||||||
|
"bg-indigo-100 dark:bg-indigo-500/20 text-indigo-600 dark:text-indigo-400",
|
||||||
|
description: "与其他面板进行联邦共享",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
path: "/group",
|
path: "/group",
|
||||||
label: "分组管理",
|
label: "分组管理",
|
||||||
|
|||||||
Reference in New Issue
Block a user