spark-server/migrations/0013_friend_directed.sql
2026-09-23 17:11:56 +08:00

39 lines
2.3 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.

-- Pair-shaped t_friend_relations (user_small, user_big) → two directed rows.
-- Skipped by cmd/migrate when t_friend_relations.user_id already exists.
CREATE TABLE IF NOT EXISTS t_friend_relations_new (
id BIGINT NOT NULL AUTO_INCREMENT COMMENT '行 id,表内自增',
user_id BIGINT NOT NULL COMMENT '关系所属用户',
friend_id BIGINT NOT NULL COMMENT '对方 user_id',
status TINYINT NOT NULL DEFAULT 1 COMMENT '1=好友 0=非好友(仅用于单向拉黑占位)',
remark VARCHAR(64) NOT NULL DEFAULT '' COMMENT '备注,仅自己可见',
is_blocked TINYINT NOT NULL DEFAULT 0 COMMENT '是否拉黑对方',
is_pinned TINYINT NOT NULL DEFAULT 0 COMMENT '会话消息置顶',
source TINYINT NOT NULL DEFAULT 0 COMMENT '添加来源:0=未知 1=二维码 2=邮箱 3=spark_id',
created_at DATETIME(3) NOT NULL COMMENT '成为好友或建边时间',
updated_at DATETIME(3) NOT NULL COMMENT '最近更新时间',
PRIMARY KEY (id),
UNIQUE KEY uk_user_friend (user_id, friend_id),
KEY idx_user_status (user_id, status)
) COMMENT='单向好友边。A 与 B 互为好友时存两行,各自维护备注、拉黑、置顶';
INSERT IGNORE INTO t_friend_relations_new (user_id, friend_id, status, remark, is_blocked, is_pinned, source, created_at, updated_at)
SELECT r.user_small, r.user_big, 1, IFNULL(n.remark, ''), 0, 0, 0, r.created_at, r.created_at
FROM t_friend_relations r
LEFT JOIN t_friend_remarks n ON n.user_id = r.user_small AND n.friend_id = r.user_big;
INSERT IGNORE INTO t_friend_relations_new (user_id, friend_id, status, remark, is_blocked, is_pinned, source, created_at, updated_at)
SELECT r.user_big, r.user_small, 1, IFNULL(n.remark, ''), 0, 0, 0, r.created_at, r.created_at
FROM t_friend_relations r
LEFT JOIN t_friend_remarks n ON n.user_id = r.user_big AND n.friend_id = r.user_small;
INSERT INTO t_friend_relations_new (user_id, friend_id, status, remark, is_blocked, is_pinned, source, created_at, updated_at)
SELECT b.user_id, b.blocked_id, 0, '', 1, 0, 0, b.created_at, b.created_at
FROM t_user_blocks b
ON DUPLICATE KEY UPDATE is_blocked = 1, updated_at = VALUES(updated_at);
DROP TABLE IF EXISTS t_friend_remarks;
DROP TABLE IF EXISTS t_user_blocks;
DROP TABLE IF EXISTS t_friend_relations;
RENAME TABLE t_friend_relations_new TO t_friend_relations;