Files
zTools2/sql/schema.sql
zikai 655e039aad refactor: 白板从画笔画板改为文本记事本
原实现是 Canvas 画笔画板,与「文字白板/记事本」需求不符。重做为纯文本实时协作:
- model:strokes JSON -> content TEXT + version INT(乐观锁)+ edit_count;
  schema/dao/service 同步重构,append_stroke/replace_strokes -> update_content。
- WS 协议:stroke -> edit(发完整文本,debounce 400ms);init 下发 content/version。
  update 帧广播给他人,cleared 广播给所有人。
- 前端:canvas -> textarea;收到远端 update 用最长公共前后缀算变更区间,
  仅替换该区间并保留光标(区间前不动/后平移/内移末尾);清空/复制文本按钮。
- schema.sql 更新 whiteboard 表 DDL;DB 旧表 DROP 重建(开发环境)。
- 测试脚本与 README 同步更新。
2026-07-21 15:00:25 +00:00

71 lines
4.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- 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/<uuid>.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 是乐观锁版本号(每次编辑 +1edit_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;