From bf1e24453c757d3acf3faad95d011583ef7a3969 Mon Sep 17 00:00:00 2001 From: hhs <386998068@qq.com> Date: Sun, 14 Jun 2026 16:42:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=BC=96=E5=86=99=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E8=A1=A8=20schema=20=E8=BF=81=E7=A7=BB=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 migrations/001_users.up.sql:创建 users 表和 refresh_tokens 表 - 新增 migrations/001_users.down.sql:回滚脚本 - users 表包含 id, username, password_hash, created_at, updated_at - refresh_tokens 表包含 id, user_id, token_hash, expires_at, created_at - 添加必要的索引优化查询性能 --- backend/migrations/001_users.down.sql | 5 +++++ backend/migrations/001_users.up.sql | 26 ++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 backend/migrations/001_users.down.sql create mode 100644 backend/migrations/001_users.up.sql diff --git a/backend/migrations/001_users.down.sql b/backend/migrations/001_users.down.sql new file mode 100644 index 0000000..4d30d76 --- /dev/null +++ b/backend/migrations/001_users.down.sql @@ -0,0 +1,5 @@ +-- 删除 Refresh Token 表(自动删除相关索引) +DROP TABLE IF EXISTS refresh_tokens; + +-- 删除用户表(自动删除相关索引) +DROP TABLE IF EXISTS users; diff --git a/backend/migrations/001_users.up.sql b/backend/migrations/001_users.up.sql new file mode 100644 index 0000000..76ff405 --- /dev/null +++ b/backend/migrations/001_users.up.sql @@ -0,0 +1,26 @@ +-- 用户表 +CREATE TABLE IF NOT EXISTS users ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + username VARCHAR(64) NOT NULL UNIQUE, + password_hash VARCHAR(255) NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), + updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- 用户名索引(用于登录查询) +CREATE INDEX IF NOT EXISTS idx_users_username ON users(username); + +-- Refresh Token 表 +CREATE TABLE IF NOT EXISTS refresh_tokens ( + id UUID PRIMARY KEY DEFAULT gen_random_uuid(), + user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, + token_hash VARCHAR(64) NOT NULL UNIQUE, + expires_at TIMESTAMPTZ NOT NULL, + created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() +); + +-- Token hash 索引(用于刷新验证) +CREATE INDEX IF NOT EXISTS idx_refresh_tokens_token_hash ON refresh_tokens(token_hash); + +-- 用户 ID 索引(用于登出所有设备) +CREATE INDEX IF NOT EXISTS idx_refresh_tokens_user_id ON refresh_tokens(user_id);