Files
FunConnect/server/migrations/20240101000003_add_user_ban.sql

55 lines
2.0 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.
-- 添加用户封禁字段
ALTER TABLE users ADD COLUMN IF NOT EXISTS is_banned BOOLEAN NOT NULL DEFAULT FALSE;
-- 添加房间邀请码
ALTER TABLE rooms ADD COLUMN IF NOT EXISTS invite_code VARCHAR(8);
-- 添加用户最后在线 IP用于安全审计
ALTER TABLE users ADD COLUMN IF NOT EXISTS last_ip VARCHAR(45);
-- 创建房间邀请表
CREATE TABLE IF NOT EXISTS room_invites (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
room_id UUID NOT NULL REFERENCES rooms(id) ON DELETE CASCADE,
inviter_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
invitee_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
status VARCHAR(16) NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'accepted', 'declined', 'expired')),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
expires_at TIMESTAMPTZ NOT NULL DEFAULT NOW() + INTERVAL '24 hours'
);
-- 创建服务器配置表(持久化配置)
CREATE TABLE IF NOT EXISTS server_config (
key VARCHAR(64) PRIMARY KEY,
value TEXT NOT NULL,
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 创建操作日志表(管理审计)
CREATE TABLE IF NOT EXISTS admin_logs (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
admin_user VARCHAR(64) NOT NULL,
action VARCHAR(64) NOT NULL,
target_type VARCHAR(32),
target_id UUID,
details JSONB,
ip_address VARCHAR(45),
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 创建下载统计表
CREATE TABLE IF NOT EXISTS download_stats (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
filename VARCHAR(255) NOT NULL,
platform VARCHAR(32) NOT NULL,
ip_address VARCHAR(45),
user_agent TEXT,
downloaded_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
-- 索引
CREATE INDEX IF NOT EXISTS idx_room_invites_invitee ON room_invites(invitee_id);
CREATE INDEX IF NOT EXISTS idx_room_invites_room ON room_invites(room_id);
CREATE INDEX IF NOT EXISTS idx_admin_logs_created ON admin_logs(created_at DESC);
CREATE INDEX IF NOT EXISTS idx_download_stats_filename ON download_stats(filename);