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);