为 Spark Messenger 主路径补齐 POST /v1/friends/requests/reject,并落地法律协议/反馈/订阅/密码登录及管理页,同步 OpenAPI 文档。 Co-authored-by: Cursor <cursoragent@cursor.com>
86 lines
6.1 KiB
SQL
86 lines
6.1 KiB
SQL
-- 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);
|