-- zikai_filesvc 数据库的表定义。 -- 由 app/scripts/init_db.py 通过本机 socket 以 root 身份执行;表级幂等。 SET NAMES utf8mb4; CREATE TABLE IF NOT EXISTS `uploaded_file` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `storage_path` VARCHAR(512) NOT NULL COMMENT 'upload_dir 下相对路径,例如 2026/06/.bin', `original_filename` VARCHAR(512) NOT NULL, `content_type` VARCHAR(255) NOT NULL DEFAULT '', `size_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0, `sha256` CHAR(64) NOT NULL DEFAULT '', `source` VARCHAR(32) NOT NULL DEFAULT 'http' COMMENT 'http / sftp / ...', `uploaded_by` VARCHAR(128) NOT NULL DEFAULT '', `uploaded_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `idx_uploaded_at` (`uploaded_at`), KEY `idx_source` (`source`), KEY `idx_sha256` (`sha256`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 分片上传会话表。由 app/services/chunk_upload_service.py 使用。 -- 运行时也由 Base.metadata.create_all 幂等创建,此处供 init_db.py 全新建库时一并导入。 CREATE TABLE IF NOT EXISTS `upload_session` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `upload_id` CHAR(64) NOT NULL COMMENT 'uuid4().hex,客户端持有的会话标识', `filename` VARCHAR(512) NOT NULL, `size_bytes` BIGINT UNSIGNED NOT NULL DEFAULT 0, `chunk_size` BIGINT UNSIGNED NOT NULL DEFAULT 0, `total_chunks` BIGINT UNSIGNED NOT NULL DEFAULT 0, `uploaded_chunks` JSON NOT NULL COMMENT '已上传分片下标数组,如 [0,1,3]', `file_id` BIGINT UNSIGNED NULL DEFAULT NULL COMMENT 'complete 后指向 uploaded_file.id', `status` VARCHAR(32) NOT NULL DEFAULT 'pending' COMMENT 'pending/completed/failed', `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 `uq_upload_id` (`upload_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 反向隧道会话表。由 app/services/tunnel_service.py + sftp_server.py 使用。 CREATE TABLE IF NOT EXISTS `tunnel_session` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `user_name` VARCHAR(128) NOT NULL COMMENT '发起隧道的 user 名', `user_ip` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'user 端 SSH peer 地址', `local_port` INT NOT NULL COMMENT 'user 要暴露的本地服务端口', `tunnel_port` INT NOT NULL COMMENT 'server 侧 SSH remote forward 绑定的本地端口', `started_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, `ended_at` DATETIME NULL DEFAULT NULL, `status` VARCHAR(32) NOT NULL DEFAULT 'active' COMMENT 'active/closed', PRIMARY KEY (`id`), KEY `idx_user_name` (`user_name`), KEY `idx_tunnel_port` (`tunnel_port`), KEY `idx_status` (`status`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- 共享白板表(文本记事本)。由 app/services/whiteboard_service.py 使用。 -- content 存完整文本,version 是乐观锁版本号(每次编辑 +1),edit_count 累计编辑次数。 -- 白板长期留存,实时同步由 WebSocket hub 在内存维护在线连接。 CREATE TABLE IF NOT EXISTS `whiteboard` ( `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, `board_id` VARCHAR(64) NOT NULL COMMENT '用户可读的 url id,[a-zA-Z0-9_-]{1,64}', `content` MEDIUMTEXT NOT NULL COMMENT '白板文本内容', `version` INT NOT NULL DEFAULT 0 COMMENT '乐观锁版本号,每次编辑 +1', `edit_count` INT 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 `uq_board_id` (`board_id`), KEY `idx_updated_at` (`updated_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;