Initial commit
This commit is contained in:
91
docs/schema.sql
Normal file
91
docs/schema.sql
Normal file
@@ -0,0 +1,91 @@
|
||||
-- users 表:存储业务用户
|
||||
CREATE TABLE IF NOT EXISTS users (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
email VARCHAR(255) UNIQUE NOT NULL,
|
||||
password_hash VARCHAR(255),
|
||||
subscription_tier VARCHAR(50) DEFAULT 'Free', -- Free, Pro, Premium
|
||||
identity_label VARCHAR(100), -- AI 创始人, SaaS Builder 等
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
-- monitored_accounts 表:存储用户重点监控的 X 账号
|
||||
CREATE TABLE IF NOT EXISTS monitored_accounts (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
x_account_id VARCHAR(255),
|
||||
x_handle VARCHAR(255) NOT NULL,
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, x_handle)
|
||||
);
|
||||
|
||||
-- monitored_keywords 表:存储用户重点监控的关键词
|
||||
CREATE TABLE IF NOT EXISTS monitored_keywords (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
keyword VARCHAR(255) NOT NULL,
|
||||
is_active BOOLEAN DEFAULT TRUE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
|
||||
UNIQUE (user_id, keyword)
|
||||
);
|
||||
|
||||
-- tweets 表:共享的推文数据池,AI 评论生成的上下文
|
||||
CREATE TABLE IF NOT EXISTS tweets (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
x_tweet_id VARCHAR(255) UNIQUE NOT NULL,
|
||||
author_id VARCHAR(255),
|
||||
author_handle VARCHAR(255),
|
||||
content TEXT NOT NULL,
|
||||
posted_at TIMESTAMP WITH TIME ZONE,
|
||||
like_count INTEGER DEFAULT 0,
|
||||
retweet_count INTEGER DEFAULT 0,
|
||||
reply_count INTEGER DEFAULT 0,
|
||||
heat_score FLOAT DEFAULT 0.0,
|
||||
is_processed BOOLEAN DEFAULT FALSE,
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_tweets_x_tweet_id ON tweets(x_tweet_id);
|
||||
CREATE INDEX idx_tweets_heat_score ON tweets(heat_score DESC);
|
||||
|
||||
-- generated_replies 表:生成的 AI 评论记录
|
||||
CREATE TABLE IF NOT EXISTS generated_replies (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
||||
tweet_id UUID NOT NULL REFERENCES tweets(id) ON DELETE CASCADE,
|
||||
strategy_type VARCHAR(100) NOT NULL, -- 认知升级型, 反向观点型, 数据补充型, 共鸣型, 创始人经验型
|
||||
content TEXT NOT NULL,
|
||||
status VARCHAR(50) DEFAULT 'draft', -- draft, copied, posted
|
||||
created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_generated_replies_user_id ON generated_replies(user_id);
|
||||
CREATE INDEX idx_generated_replies_tweet_id ON generated_replies(tweet_id);
|
||||
|
||||
-- reply_performance 表:针对已发布评论的效果数据回拨
|
||||
CREATE TABLE IF NOT EXISTS reply_performance (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
reply_id UUID NOT NULL REFERENCES generated_replies(id) ON DELETE CASCADE,
|
||||
like_count_increase INTEGER DEFAULT 0,
|
||||
reply_count_increase INTEGER DEFAULT 0,
|
||||
interaction_rate FLOAT DEFAULT 0.0,
|
||||
check_time TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
|
||||
CREATE INDEX idx_reply_performance_reply_id ON reply_performance(reply_id);
|
||||
|
||||
-- 更新 updated_at 的触发器函数
|
||||
CREATE OR REPLACE FUNCTION update_modified_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
-- 为 users 表添加触发器
|
||||
CREATE TRIGGER update_users_modtime
|
||||
BEFORE UPDATE ON users
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_modified_column();
|
||||
Reference in New Issue
Block a user