feat: add nearby social services
This commit is contained in:
92
src/business/social/migrations/create-social-tables.sql
Normal file
92
src/business/social/migrations/create-social-tables.sql
Normal file
@@ -0,0 +1,92 @@
|
||||
-- WhaleTown V2 core social infrastructure. Run after the existing users/user_profiles tables.
|
||||
-- Compatible with MySQL 5.7+/MariaDB: add the column only once.
|
||||
SET @nickname_column_exists := (
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'users' AND COLUMN_NAME = 'nickname_updated_at'
|
||||
);
|
||||
SET @nickname_column_sql := IF(
|
||||
@nickname_column_exists = 0,
|
||||
'ALTER TABLE users ADD COLUMN nickname_updated_at DATETIME NULL COMMENT ''社区昵称最近修改时间''',
|
||||
'SELECT 1'
|
||||
);
|
||||
PREPARE nickname_column_statement FROM @nickname_column_sql;
|
||||
EXECUTE nickname_column_statement;
|
||||
DEALLOCATE PREPARE nickname_column_statement;
|
||||
UPDATE user_profiles SET current_map = 'whale_port' WHERE current_map = 'plaza';
|
||||
UPDATE user_profiles SET current_map = 'personal_space' WHERE current_map = 'room';
|
||||
|
||||
CREATE TABLE IF NOT EXISTS friendships (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
user_low_id BIGINT NOT NULL,
|
||||
user_high_id BIGINT NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_friendships_pair (user_low_id, user_high_id),
|
||||
KEY idx_friendships_low (user_low_id),
|
||||
KEY idx_friendships_high (user_high_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS friend_requests (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
requester_id BIGINT NOT NULL,
|
||||
recipient_id BIGINT NOT NULL,
|
||||
status VARCHAR(16) NOT NULL DEFAULT 'pending',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expires_at DATETIME NOT NULL,
|
||||
responded_at DATETIME NULL,
|
||||
KEY idx_friend_requests_recipient (recipient_id, status, expires_at),
|
||||
KEY idx_friend_requests_pair (requester_id, recipient_id, status)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_blocks (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL,
|
||||
blocked_user_id BIGINT NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_user_blocks_pair (user_id, blocked_user_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS direct_messages (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
sender_id BIGINT NOT NULL,
|
||||
recipient_id BIGINT NOT NULL,
|
||||
content VARCHAR(1000) NOT NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expires_at DATETIME NOT NULL,
|
||||
read_at DATETIME NULL,
|
||||
KEY idx_direct_messages_conversation (sender_id, recipient_id, created_at),
|
||||
KEY idx_direct_messages_unread (recipient_id, read_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS user_reports (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
reporter_id BIGINT NOT NULL,
|
||||
reported_user_id BIGINT NOT NULL,
|
||||
reason VARCHAR(32) NOT NULL,
|
||||
note VARCHAR(500) NULL,
|
||||
message_id BIGINT NULL,
|
||||
status VARCHAR(24) NOT NULL DEFAULT 'received',
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
KEY idx_user_reports_reporter (reporter_id, created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS player_travel_unlocks (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL,
|
||||
destination_id VARCHAR(80) NOT NULL,
|
||||
discovered_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE KEY uq_player_travel_unlocks (user_id, destination_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS social_notifications (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
user_id BIGINT NOT NULL,
|
||||
category VARCHAR(48) NOT NULL,
|
||||
title VARCHAR(100) NOT NULL,
|
||||
content VARCHAR(500) NOT NULL,
|
||||
action_metadata JSON NULL,
|
||||
read_at DATETIME NULL,
|
||||
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
expires_at DATETIME NOT NULL,
|
||||
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
KEY idx_social_notifications_user (user_id, read_at, created_at)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
Reference in New Issue
Block a user