feat(feedback): 新增用户反馈提交、分页列表与语音描述
支持 Bug/需求提交、截图与聊天同款语音输入,全站反馈分页浏览与详情页,并从聊天与空间页提供入口。 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -223,6 +223,7 @@ CREATE TABLE IF NOT EXISTS h5_publish_records (
|
||||
token_hash CHAR(64) NULL,
|
||||
token_prefix VARCHAR(16) NULL,
|
||||
expires_at BIGINT NULL,
|
||||
user_confirmed_at BIGINT NULL,
|
||||
published_at BIGINT NOT NULL,
|
||||
offline_at BIGINT NULL,
|
||||
status ENUM('draft', 'online', 'expired', 'offline', 'blocked') NOT NULL DEFAULT 'online',
|
||||
@@ -232,6 +233,7 @@ CREATE TABLE IF NOT EXISTS h5_publish_records (
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_h5_publish_route (url_slug, status, published_at),
|
||||
KEY idx_h5_publish_page (user_id, page_id, published_at),
|
||||
KEY idx_h5_publish_auto_private (access_mode, status, user_confirmed_at, expires_at),
|
||||
UNIQUE KEY uq_h5_publish_token_hash (token_hash),
|
||||
CONSTRAINT fk_h5_publish_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_h5_publish_page FOREIGN KEY (page_id) REFERENCES h5_page_records(id) ON DELETE CASCADE,
|
||||
@@ -239,6 +241,17 @@ CREATE TABLE IF NOT EXISTS h5_publish_records (
|
||||
CONSTRAINT fk_h5_publish_scan FOREIGN KEY (security_scan_id) REFERENCES h5_security_scans(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_publication_asset_refs (
|
||||
publication_id CHAR(36) NOT NULL,
|
||||
asset_id CHAR(36) NOT NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
PRIMARY KEY (publication_id, asset_id),
|
||||
KEY idx_asset_id (asset_id),
|
||||
KEY idx_created_at (created_at),
|
||||
CONSTRAINT fk_h5_pub_asset_ref_pub FOREIGN KEY (publication_id) REFERENCES h5_publish_records(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_h5_pub_asset_ref_asset FOREIGN KEY (asset_id) REFERENCES h5_assets(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_publication_events (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
publish_id CHAR(36) NOT NULL,
|
||||
@@ -647,6 +660,7 @@ CREATE TABLE IF NOT EXISTS h5_session_snapshots (
|
||||
agent_session_id VARCHAR(128) NOT NULL PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
name VARCHAR(512) NOT NULL DEFAULT '',
|
||||
display_title VARCHAR(512) NOT NULL DEFAULT '',
|
||||
working_dir VARCHAR(1024) NOT NULL DEFAULT '',
|
||||
created_at_str VARCHAR(64) NOT NULL DEFAULT '',
|
||||
updated_at_str VARCHAR(64) NOT NULL DEFAULT '',
|
||||
@@ -997,3 +1011,81 @@ CREATE TABLE IF NOT EXISTS h5_blocked_words (
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uk_blocked_word (word)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
-- Shared experience store (etat C): all goosed Worker instances read/write the
|
||||
-- same learned experience so capability is not siloed per instance. Built on
|
||||
-- MySQL first with a keyword + recency retrieval; `embedding` is reserved for a
|
||||
-- later move to PostgreSQL + pgvector without changing the calling contract.
|
||||
CREATE TABLE IF NOT EXISTS h5_experience (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
scope VARCHAR(64) NOT NULL DEFAULT 'global',
|
||||
kind VARCHAR(32) NOT NULL DEFAULT 'lesson',
|
||||
title VARCHAR(255) NOT NULL,
|
||||
body MEDIUMTEXT NOT NULL,
|
||||
tags_json JSON NULL,
|
||||
source_session_id VARCHAR(128) NULL,
|
||||
source_user_id CHAR(36) NULL,
|
||||
use_count BIGINT NOT NULL DEFAULT 0,
|
||||
embedding JSON NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_h5_experience_scope_updated (scope, updated_at),
|
||||
FULLTEXT KEY ftx_h5_experience (title, body)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_conversation_messages (
|
||||
id CHAR(64) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
agent_session_id VARCHAR(128) NOT NULL,
|
||||
message_key VARCHAR(128) NOT NULL,
|
||||
sequence_no INT NOT NULL DEFAULT 0,
|
||||
role VARCHAR(32) NOT NULL,
|
||||
text MEDIUMTEXT NOT NULL,
|
||||
raw_json LONGTEXT NULL,
|
||||
analyzed_at BIGINT NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uq_h5_conversation_message (agent_session_id, message_key),
|
||||
KEY idx_h5_conversation_user_created (user_id, created_at),
|
||||
KEY idx_h5_conversation_user_analyzed (user_id, analyzed_at),
|
||||
CONSTRAINT fk_h5_conversation_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_h5_conversation_session FOREIGN KEY (agent_session_id) REFERENCES h5_user_sessions(agent_session_id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_user_memory_items (
|
||||
id CHAR(64) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
label ENUM('preference', 'habit', 'interest', 'goal', 'fact', 'experience', 'knowledge') NOT NULL DEFAULT 'fact',
|
||||
memory_hash CHAR(64) NOT NULL,
|
||||
memory_text TEXT NOT NULL,
|
||||
evidence_message_id CHAR(64) NULL,
|
||||
source_session_id VARCHAR(128) NULL,
|
||||
confidence DECIMAL(4,3) NOT NULL DEFAULT 0.600,
|
||||
status ENUM('active', 'archived', 'deleted') NOT NULL DEFAULT 'active',
|
||||
raw_json JSON NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
UNIQUE KEY uq_h5_user_memory_hash (user_id, memory_hash),
|
||||
KEY idx_h5_user_memory_user_label (user_id, label, updated_at),
|
||||
KEY idx_h5_user_memory_session (source_session_id),
|
||||
CONSTRAINT fk_h5_user_memory_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE,
|
||||
CONSTRAINT fk_h5_user_memory_evidence FOREIGN KEY (evidence_message_id) REFERENCES h5_conversation_messages(id) ON DELETE SET NULL,
|
||||
CONSTRAINT fk_h5_user_memory_session FOREIGN KEY (source_session_id) REFERENCES h5_user_sessions(agent_session_id) ON DELETE SET NULL
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS h5_user_feedback (
|
||||
id CHAR(36) PRIMARY KEY,
|
||||
user_id CHAR(36) NOT NULL,
|
||||
type ENUM('bug', 'feature', 'other') NOT NULL,
|
||||
title VARCHAR(120) NOT NULL,
|
||||
description TEXT NOT NULL,
|
||||
contact VARCHAR(120) NULL,
|
||||
status ENUM('pending', 'reviewing', 'resolved', 'closed') NOT NULL DEFAULT 'pending',
|
||||
images_json JSON NULL,
|
||||
context_json JSON NULL,
|
||||
created_at BIGINT NOT NULL,
|
||||
updated_at BIGINT NOT NULL,
|
||||
KEY idx_h5_user_feedback_user_created (user_id, created_at),
|
||||
KEY idx_h5_user_feedback_status_created (status, created_at),
|
||||
CONSTRAINT fk_h5_user_feedback_user FOREIGN KEY (user_id) REFERENCES h5_users(id) ON DELETE CASCADE
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
|
||||
Reference in New Issue
Block a user