spark-server/migrations/0023_client_legal_feedback_subscription.sql
DESKTOP-L8OUL9F\gfl0034 1edcb959b7 feat: 补好友拒绝、客户端配置 API 与 OpenAPI/popadmin
为 Spark Messenger 主路径补齐 POST /v1/friends/requests/reject,并落地法律协议/反馈/订阅/密码登录及管理页,同步 OpenAPI 文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-24 14:01:46 +08:00

86 lines
6.1 KiB
SQL
Raw Permalink 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.

-- Health / client:隐私协议、意见反馈、订阅套餐、邮箱密码。
CREATE TABLE IF NOT EXISTS t_legal_documents (
doc_key VARCHAR(32) NOT NULL COMMENT 'privacy|terms',
lang VARCHAR(16) NOT NULL COMMENT 'zh-CN|en|zh-TW',
title VARCHAR(256) NOT NULL DEFAULT '' COMMENT '文档标题',
content MEDIUMTEXT NOT NULL COMMENT '正文(纯文本或 Markdown)',
version VARCHAR(32) NOT NULL DEFAULT '1.0' COMMENT '文档版本',
updated_at DATETIME(3) NOT NULL COMMENT '更新时间',
PRIMARY KEY (doc_key, lang)
) COMMENT='客户端隐私政策与用户协议(按语言)';
CREATE TABLE IF NOT EXISTS t_feedback (
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '反馈自增 id',
user_id BIGINT NULL COMMENT '可选登录用户 uid',
email VARCHAR(255) NOT NULL DEFAULT '' COMMENT '联系邮箱',
content VARCHAR(2000) NOT NULL COMMENT '反馈正文',
app_version VARCHAR(64) NOT NULL DEFAULT '' COMMENT '客户端版本',
language VARCHAR(16) NOT NULL DEFAULT 'zh-CN' COMMENT '提交时语言',
status VARCHAR(32) NOT NULL DEFAULT 'open' COMMENT 'open|done|ignored',
created_at DATETIME(3) NOT NULL COMMENT '创建时间',
KEY idx_feedback_created (created_at)
) COMMENT='客户端意见反馈';
CREATE TABLE IF NOT EXISTS t_subscription_plans (
plan_id VARCHAR(32) NOT NULL COMMENT 'week|month|quarter|year',
lang VARCHAR(16) NOT NULL COMMENT 'zh-CN|en|zh-TW',
title VARCHAR(128) NOT NULL DEFAULT '' COMMENT '套餐标题',
subtitle VARCHAR(256) NOT NULL DEFAULT '' COMMENT '副标题/卖点',
price_display VARCHAR(64) NOT NULL DEFAULT '' COMMENT '展示价,如 ¥12',
price_cents INT NOT NULL DEFAULT 0 COMMENT '价格(分)',
currency VARCHAR(8) NOT NULL DEFAULT 'CNY' COMMENT '币种',
period_days INT NOT NULL DEFAULT 7 COMMENT '周期天数',
badge VARCHAR(64) NOT NULL DEFAULT '' COMMENT '角标文案,可空',
sort_order INT NOT NULL DEFAULT 0 COMMENT '越小越靠前',
enabled TINYINT(1) NOT NULL DEFAULT 1 COMMENT '1=上架',
product_id VARCHAR(128) NOT NULL DEFAULT '' COMMENT 'IAP/商品 id',
updated_at DATETIME(3) NOT NULL COMMENT '更新时间',
PRIMARY KEY (plan_id, lang),
KEY idx_sub_plans_list (enabled, sort_order)
) COMMENT='订阅引导周/月/季/年卡配置';
CREATE TABLE IF NOT EXISTS t_user_passwords (
user_id BIGINT PRIMARY KEY COMMENT 't_users.id',
password_hash VARCHAR(255) NOT NULL COMMENT 'bcrypt 哈希',
updated_at DATETIME(3) NOT NULL COMMENT '更新时间'
) COMMENT='邮箱密码登录哈希(与验证码登录并存)';
INSERT INTO t_legal_documents (doc_key, lang, title, content, version, updated_at) VALUES
('privacy', 'zh-CN', '隐私政策',
'我们重视您的隐私。本应用会收集账号邮箱、设备标识与使用数据,用于登录、内容推荐与安全风控。未经同意不会向第三方出售个人信息。您可随时注销账号。',
'1.0', CURRENT_TIMESTAMP(3)),
('terms', 'zh-CN', '用户协议',
'使用本应用即表示您同意遵守社区规范,不得传播违法有害内容。会员权益以订阅页展示为准,虚拟商品一经开通除法律规定外不予退款。',
'1.0', CURRENT_TIMESTAMP(3)),
('privacy', 'en', 'Privacy Policy',
'We value your privacy. We collect email, device identifiers and usage data for login, recommendations and security. We do not sell personal data. You may delete your account at any time.',
'1.0', CURRENT_TIMESTAMP(3)),
('terms', 'en', 'Terms of Use',
'By using this app you agree to community rules. Membership benefits follow the subscription page. Virtual goods are generally non-refundable except as required by law.',
'1.0', CURRENT_TIMESTAMP(3)),
('privacy', 'zh-TW', '隱私政策',
'我們重視您的隱私。本應用會收集帳號郵箱、裝置識別與使用資料,用於登入、內容推薦與安全風控。未經同意不會向第三方出售個人資訊。',
'1.0', CURRENT_TIMESTAMP(3)),
('terms', 'zh-TW', '用戶協議',
'使用本應用即表示您同意遵守社群規範。會員權益以訂閱頁展示為準,虛擬商品除法律規定外不予退款。',
'1.0', CURRENT_TIMESTAMP(3))
ON DUPLICATE KEY UPDATE title = VALUES(title);
INSERT INTO t_subscription_plans
(plan_id, lang, title, subtitle, price_display, price_cents, currency, period_days, badge, sort_order, enabled, product_id, updated_at)
VALUES
('week', 'zh-CN', '周卡', '灵活体验,随时可停', '¥12', 1200, 'CNY', 7, '', 1, 1, 'health.sub.week', CURRENT_TIMESTAMP(3)),
('month', 'zh-CN', '月卡', '最受欢迎', '¥30', 3000, 'CNY', 30, '热门', 2, 1, 'health.sub.month', CURRENT_TIMESTAMP(3)),
('quarter', 'zh-CN', '季卡', '平均每月更省', '¥68', 6800, 'CNY', 90, '', 3, 1, 'health.sub.quarter', CURRENT_TIMESTAMP(3)),
('year', 'zh-CN', '年卡', '全年畅听会员曲库', '¥198', 19800, 'CNY', 365, '超值', 4, 1, 'health.sub.year', CURRENT_TIMESTAMP(3)),
('week', 'en', 'Weekly', 'Flexible, cancel anytime', '$1.99', 199, 'USD', 7, '', 1, 1, 'health.sub.week', CURRENT_TIMESTAMP(3)),
('month', 'en', 'Monthly', 'Most popular', '$4.99', 499, 'USD', 30, 'Popular', 2, 1, 'health.sub.month', CURRENT_TIMESTAMP(3)),
('quarter', 'en', 'Quarterly', 'Better monthly value', '$12.99', 1299, 'USD', 90, '', 3, 1, 'health.sub.quarter', CURRENT_TIMESTAMP(3)),
('year', 'en', 'Yearly', 'Best value all year', '$29.99', 2999, 'USD', 365, 'Best', 4, 1, 'health.sub.year', CURRENT_TIMESTAMP(3)),
('week', 'zh-TW', '週卡', '靈活體驗,隨時可停', 'NT$60', 6000, 'TWD', 7, '', 1, 1, 'health.sub.week', CURRENT_TIMESTAMP(3)),
('month', 'zh-TW', '月卡', '最受歡迎', 'NT$150', 15000, 'TWD', 30, '熱門', 2, 1, 'health.sub.month', CURRENT_TIMESTAMP(3)),
('quarter', 'zh-TW', '季卡', '平均每月更省', 'NT$380', 38000, 'TWD', 90, '', 3, 1, 'health.sub.quarter', CURRENT_TIMESTAMP(3)),
('year', 'zh-TW', '年卡', '全年暢聽會員曲庫', 'NT$990', 99000, 'TWD', 365, '超值', 4, 1, 'health.sub.year', CURRENT_TIMESTAMP(3))
ON DUPLICATE KEY UPDATE title = VALUES(title);