spark-server/migrations/0007_friends.sql
zhr ae9a71034d feat: implement Spark IM V3 modular monolith
Add HTTP /v1 MVC, TCP send path, groups with server-side member-avatar collage, object-storage upload, and friends/favorites around the architecture-v3 layout.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-17 19:52:11 +08:00

51 lines
2.8 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.

-- Bidirectional friends, one pending request per pair, unidirectional block/remark/report.
CREATE TABLE IF NOT EXISTS friend_relations (
user_small BIGINT NOT NULL COMMENT '两人中较小的 user_id,保证同一对用户只有一行',
user_big BIGINT NOT NULL COMMENT '两人中较大的 user_id',
created_at DATETIME(3) NOT NULL COMMENT '成为好友时间',
PRIMARY KEY (user_small, user_big),
KEY idx_user_big (user_big)
) COMMENT='双向好友。无单向好友;删除任一方即解除双方关系';
CREATE TABLE IF NOT EXISTS friend_requests (
id BIGINT PRIMARY KEY COMMENT 'Snowflake 申请 id',
from_user BIGINT NOT NULL COMMENT '申请人 user_id',
to_user BIGINT NOT NULL COMMENT '被申请人 user_id',
source TINYINT NOT NULL COMMENT '来源:1=二维码 2=邮箱 3=spark_id',
reason VARCHAR(128) NOT NULL DEFAULT '' COMMENT '申请理由',
remark VARCHAR(64) NOT NULL DEFAULT '' COMMENT '申请人对对方的备注,同意后写入 friend_remarks',
status TINYINT NOT NULL DEFAULT 1 COMMENT '1=待处理 2=已同意 3=已拒绝',
created_at DATETIME(3) NOT NULL COMMENT '首次申请时间',
updated_at DATETIME(3) NOT NULL COMMENT '最近一次申请或处理时间',
UNIQUE KEY uk_from_to (from_user, to_user),
KEY idx_to_status (to_user, status, updated_at)
) COMMENT='好友申请。同一对 from→to 只保留一行,重复发起覆盖理由与备注';
CREATE TABLE IF NOT EXISTS friend_remarks (
user_id BIGINT NOT NULL COMMENT '备注所属用户',
friend_id BIGINT NOT NULL COMMENT '被备注的用户',
remark VARCHAR(64) NOT NULL DEFAULT '' COMMENT '备注名,仅对备注者可见',
updated_at DATETIME(3) NOT NULL COMMENT '更新时间',
PRIMARY KEY (user_id, friend_id)
) COMMENT='好友备注。单向,解除好友时删除双方备注';
CREATE TABLE IF NOT EXISTS user_blocks (
user_id BIGINT NOT NULL COMMENT '拉黑人 user_id',
blocked_id BIGINT NOT NULL COMMENT '被拉黑人 user_id',
created_at DATETIME(3) NOT NULL COMMENT '拉黑时间',
PRIMARY KEY (user_id, blocked_id),
KEY idx_blocked (blocked_id)
) COMMENT='拉黑。单向;拉黑时解除好友关系';
CREATE TABLE IF NOT EXISTS friend_reports (
id BIGINT PRIMARY KEY COMMENT 'Snowflake 投诉 id',
user_id BIGINT NOT NULL COMMENT '投诉人 user_id',
target_id BIGINT NOT NULL COMMENT '被投诉人 user_id',
reason TINYINT NOT NULL COMMENT '投诉类型:1=垃圾 2=骚扰 3=不实身份 4=其他',
detail VARCHAR(512) NOT NULL DEFAULT '' COMMENT '投诉说明',
created_at DATETIME(3) NOT NULL COMMENT '投诉时间',
KEY idx_user_created (user_id, created_at),
KEY idx_target (target_id)
) COMMENT='好友投诉。仅记录,不自动拉黑';