Files
InsightReply/docs/schema.sql
2026-02-28 20:05:15 +08:00

92 lines
3.5 KiB
PL/PgSQL
Raw 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.
-- 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();