mirror of
https://github.com/Sagit-chu/flvx.git
synced 2026-09-28 23:56:36 +08:00
45d7970177
* feat(announcement): add database schema for SQLite and PostgreSQL Add announcement table with id, title, content, enabled, created_at, updated_at columns to both SQLite and PostgreSQL schemas to support announcement system. * feat(announcement): implement SQLite repository for announcement management Add announcement CRUD operations in SQLite repository including create, read, update, delete, and list methods with proper error handling. * feat(announcement): add HTTP handlers and auth middleware for announcement API Implement admin-only update endpoint and public read endpoint for announcements. Add auth middleware to enforce admin-only access for update operations. * feat(announcement): add frontend API client for announcement endpoints Implement API client methods for fetching announcements and updating announcement settings with proper error handling. * feat(announcement): add announcement display component to dashboard Implement announcement display section in dashboard with real-time updates and proper styling using HeroUI components. * feat(announcement): add announcement management UI to config page Implement announcement settings panel with enable/disable toggle and content editor for admin users to manage announcements.
255 lines
7.9 KiB
SQL
255 lines
7.9 KiB
SQL
-- SQLite Auto-generated schema
|
|
-- This will be executed automatically on startup if tables don't exist
|
|
|
|
CREATE TABLE IF NOT EXISTS forward (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL,
|
|
user_name VARCHAR(100) NOT NULL,
|
|
name VARCHAR(100) NOT NULL,
|
|
tunnel_id INTEGER NOT NULL,
|
|
remote_addr TEXT NOT NULL,
|
|
strategy VARCHAR(100) NOT NULL DEFAULT 'fifo',
|
|
in_flow INTEGER NOT NULL DEFAULT 0,
|
|
out_flow INTEGER NOT NULL DEFAULT 0,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL,
|
|
status INTEGER NOT NULL,
|
|
inx INTEGER NOT NULL DEFAULT 0
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS forward_port (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
forward_id INTEGER NOT NULL,
|
|
node_id INTEGER NOT NULL,
|
|
port INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS node (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
secret VARCHAR(100) NOT NULL,
|
|
server_ip VARCHAR(100) NOT NULL,
|
|
server_ip_v4 VARCHAR(100),
|
|
server_ip_v6 VARCHAR(100),
|
|
port TEXT NOT NULL,
|
|
interface_name VARCHAR(200),
|
|
version VARCHAR(100),
|
|
http INTEGER NOT NULL DEFAULT 0,
|
|
tls INTEGER NOT NULL DEFAULT 0,
|
|
socks INTEGER NOT NULL DEFAULT 0,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER,
|
|
status INTEGER NOT NULL,
|
|
tcp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
|
udp_listen_addr VARCHAR(100) NOT NULL DEFAULT '[::]',
|
|
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 (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
speed INTEGER NOT NULL,
|
|
tunnel_id INTEGER NOT NULL,
|
|
tunnel_name VARCHAR(100) NOT NULL,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER,
|
|
status INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS statistics_flow (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL,
|
|
flow INTEGER NOT NULL,
|
|
total_flow INTEGER NOT NULL,
|
|
time VARCHAR(100) NOT NULL,
|
|
created_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tunnel (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
traffic_ratio REAL NOT NULL DEFAULT 1.0,
|
|
type INTEGER NOT NULL,
|
|
protocol VARCHAR(10) NOT NULL DEFAULT 'tls',
|
|
flow INTEGER NOT NULL,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL,
|
|
status INTEGER NOT NULL,
|
|
in_ip TEXT,
|
|
inx INTEGER NOT NULL DEFAULT 0,
|
|
ip_preference VARCHAR(10) NOT NULL DEFAULT ''
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS chain_tunnel (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tunnel_id INTEGER NOT NULL ,
|
|
chain_type VARCHAR(10) NOT NULL,
|
|
node_id INTEGER NOT NULL ,
|
|
port INTEGER,
|
|
strategy VARCHAR(10),
|
|
inx INTEGER,
|
|
protocol VARCHAR(10)
|
|
);
|
|
|
|
|
|
CREATE TABLE IF NOT EXISTS user (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user VARCHAR(100) NOT NULL,
|
|
pwd VARCHAR(100) NOT NULL,
|
|
role_id INTEGER NOT NULL,
|
|
exp_time INTEGER NOT NULL,
|
|
flow INTEGER NOT NULL,
|
|
in_flow INTEGER NOT NULL DEFAULT 0,
|
|
out_flow INTEGER NOT NULL DEFAULT 0,
|
|
flow_reset_time INTEGER NOT NULL,
|
|
num INTEGER NOT NULL,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER,
|
|
status INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_tunnel (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_id INTEGER NOT NULL,
|
|
tunnel_id INTEGER NOT NULL,
|
|
speed_id INTEGER,
|
|
num INTEGER NOT NULL,
|
|
flow INTEGER NOT NULL,
|
|
in_flow INTEGER NOT NULL DEFAULT 0,
|
|
out_flow INTEGER NOT NULL DEFAULT 0,
|
|
flow_reset_time INTEGER NOT NULL,
|
|
exp_time INTEGER NOT NULL,
|
|
status INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tunnel_group (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL,
|
|
status INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_group (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(100) NOT NULL,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL,
|
|
status INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS tunnel_group_tunnel (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tunnel_group_id INTEGER NOT NULL,
|
|
tunnel_id INTEGER NOT NULL,
|
|
created_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS user_group_user (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_group_id INTEGER NOT NULL,
|
|
user_id INTEGER NOT NULL,
|
|
created_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS group_permission (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_group_id INTEGER NOT NULL,
|
|
tunnel_group_id INTEGER NOT NULL,
|
|
created_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS group_permission_grant (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
user_group_id INTEGER NOT NULL,
|
|
tunnel_group_id INTEGER NOT NULL,
|
|
user_tunnel_id INTEGER NOT NULL,
|
|
created_by_group INTEGER NOT NULL DEFAULT 0,
|
|
created_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_tunnel_group_name ON tunnel_group(name);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_group_name ON user_group(name);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_tunnel_group_tunnel_unique ON tunnel_group_tunnel(tunnel_group_id, tunnel_id);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_group_user_unique ON user_group_user(user_group_id, user_id);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_group_permission_unique ON group_permission(user_group_id, tunnel_group_id);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_group_permission_grant_unique ON group_permission_grant(user_group_id, tunnel_group_id, user_tunnel_id);
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_user_tunnel_unique ON user_tunnel(user_id, tunnel_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS vite_config (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
name VARCHAR(200) NOT NULL UNIQUE,
|
|
value VARCHAR(200) 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 '',
|
|
allowed_ips TEXT DEFAULT ''
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS peer_share_runtime (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
share_id INTEGER NOT NULL,
|
|
node_id INTEGER NOT NULL,
|
|
reservation_id TEXT NOT NULL UNIQUE,
|
|
resource_key TEXT NOT NULL UNIQUE,
|
|
binding_id TEXT NOT NULL DEFAULT '',
|
|
role TEXT NOT NULL DEFAULT '',
|
|
chain_name TEXT NOT NULL DEFAULT '',
|
|
service_name TEXT NOT NULL DEFAULT '',
|
|
protocol TEXT NOT NULL DEFAULT 'tls',
|
|
strategy TEXT NOT NULL DEFAULT 'round',
|
|
port INTEGER NOT NULL DEFAULT 0,
|
|
target TEXT NOT NULL DEFAULT '',
|
|
applied INTEGER NOT NULL DEFAULT 0,
|
|
status INTEGER NOT NULL DEFAULT 1,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_peer_share_runtime_share_node_status ON peer_share_runtime(share_id, node_id, status);
|
|
CREATE INDEX IF NOT EXISTS idx_peer_share_runtime_binding_id ON peer_share_runtime(binding_id);
|
|
|
|
CREATE TABLE IF NOT EXISTS federation_tunnel_binding (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
tunnel_id INTEGER NOT NULL,
|
|
node_id INTEGER NOT NULL,
|
|
chain_type INTEGER NOT NULL,
|
|
hop_inx INTEGER NOT NULL DEFAULT 0,
|
|
remote_url TEXT NOT NULL,
|
|
resource_key TEXT NOT NULL UNIQUE,
|
|
remote_binding_id TEXT NOT NULL,
|
|
allocated_port INTEGER NOT NULL,
|
|
status INTEGER NOT NULL DEFAULT 1,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER NOT NULL
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS idx_federation_tunnel_binding_unique ON federation_tunnel_binding(tunnel_id, node_id, chain_type, hop_inx);
|
|
CREATE INDEX IF NOT EXISTS idx_federation_tunnel_binding_tunnel ON federation_tunnel_binding(tunnel_id, status);
|
|
|
|
CREATE TABLE IF NOT EXISTS announcement (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
content TEXT NOT NULL,
|
|
enabled INTEGER NOT NULL DEFAULT 1,
|
|
created_time INTEGER NOT NULL,
|
|
updated_time INTEGER
|
|
);
|