add: some user api and all api desc
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
CREATE TABLE comment_likes (
|
||||
comment_id BIGINT NOT NULL,
|
||||
user_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
PRIMARY KEY (comment_id, user_id)
|
||||
);
|
||||
|
||||
CREATE INDEX idx_comment_likes_lookup ON comment_likes(user_id, comment_id);
|
||||
@@ -0,0 +1,21 @@
|
||||
CREATE TABLE comments (
|
||||
id BIGINT PRIMARY KEY,
|
||||
post_id BIGINT NOT NULL REFERENCES posts(id),
|
||||
author_id BIGINT NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
like_count INT DEFAULT 0,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
deleted_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
-- 基础索引
|
||||
CREATE INDEX idx_comments_post ON comments(post_id, created_at) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX idx_comments_author ON comments(author_id, created_at DESC) WHERE deleted_at IS NULL;
|
||||
|
||||
-- 三元组索引用于评论内容搜索
|
||||
CREATE INDEX idx_comments_content_trgm ON comments USING gin(content gin_trgm_ops)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
-- 热门评论索引
|
||||
CREATE INDEX idx_comments_post_likes ON comments(post_id, like_count DESC, created_at)
|
||||
WHERE deleted_at IS NULL;
|
||||
@@ -0,0 +1,14 @@
|
||||
CREATE TABLE post_likes (
|
||||
post_id BIGINT NOT NULL,
|
||||
user_id BIGINT NOT NULL,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
|
||||
-- 复合主键,防止重复点赞
|
||||
PRIMARY KEY (post_id, user_id)
|
||||
);
|
||||
|
||||
-- [核心索引] 优化 "feed流中判断我是否已赞" (user_id = ? AND post_id IN (...))
|
||||
CREATE INDEX idx_post_likes_lookup ON post_likes(user_id, post_id);
|
||||
|
||||
-- [核心索引] 优化 "我赞过的帖子" 列表
|
||||
CREATE INDEX idx_post_likes_user_timeline ON post_likes(user_id, created_at DESC);
|
||||
@@ -0,0 +1,58 @@
|
||||
CREATE TABLE posts (
|
||||
id BIGINT PRIMARY KEY,
|
||||
author_id BIGINT NOT NULL,
|
||||
author_role VARCHAR(20) NOT NULL,
|
||||
title VARCHAR(500) NOT NULL,
|
||||
content TEXT NOT NULL,
|
||||
images TEXT[] DEFAULT ARRAY[]::TEXT[],
|
||||
tags TEXT[] DEFAULT ARRAY[]::TEXT[],
|
||||
linked_order_id BIGINT,
|
||||
quoted_post_id BIGINT REFERENCES posts(id),
|
||||
like_count INT DEFAULT 0,
|
||||
comment_count INT DEFAULT 0,
|
||||
pinned BOOLEAN DEFAULT FALSE,
|
||||
search_text TEXT GENERATED ALWAYS AS (
|
||||
title || ' ' || content
|
||||
) STORED,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
deleted_at TIMESTAMPTZ
|
||||
);
|
||||
|
||||
-- 基础索引
|
||||
CREATE INDEX idx_posts_author ON posts(author_id, created_at DESC) WHERE deleted_at IS NULL;
|
||||
CREATE INDEX idx_posts_created ON posts(created_at DESC) WHERE deleted_at IS NULL;
|
||||
|
||||
-- 三元组索引用于帖子内容搜索
|
||||
CREATE INDEX idx_posts_search_trgm ON posts USING gin(search_text gin_trgm_ops)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
-- 全文搜索索引
|
||||
CREATE INDEX idx_posts_fulltext ON posts USING gin(
|
||||
to_tsvector('simple', title || ' ' || content)
|
||||
) WHERE deleted_at IS NULL;
|
||||
|
||||
-- 标签 GIN 索引
|
||||
CREATE INDEX idx_posts_tags_gin ON posts USING gin(tags) WHERE deleted_at IS NULL;
|
||||
|
||||
-- 复合索引优化热门排序
|
||||
CREATE INDEX idx_posts_hot_score ON posts(
|
||||
(like_count * 2 + comment_count) DESC,
|
||||
created_at DESC
|
||||
) WHERE deleted_at IS NULL;
|
||||
|
||||
-- 置顶+时间索引
|
||||
CREATE INDEX idx_posts_pinned_created ON posts(author_id, pinned DESC, created_at DESC)
|
||||
WHERE deleted_at IS NULL;
|
||||
|
||||
-- 关联订单索引
|
||||
CREATE INDEX idx_posts_linked_order ON posts(linked_order_id)
|
||||
WHERE linked_order_id IS NOT NULL AND deleted_at IS NULL;
|
||||
|
||||
-- 图片数组索引
|
||||
CREATE INDEX idx_posts_images ON posts USING gin(images) WHERE deleted_at IS NULL;
|
||||
|
||||
CREATE TRIGGER trigger_posts_updated_at
|
||||
BEFORE UPDATE ON posts
|
||||
FOR EACH ROW
|
||||
EXECUTE FUNCTION update_updated_at_column();
|
||||
Reference in New Issue
Block a user