Refactor: Remove deprecated gRPC service files and implement new API structure

- Deleted old gRPC service definitions in `game_grpc.pb.go` and `public.go`.
- Added new API server implementations for objectstory, player, and shop services.
- Introduced configuration files for new APIs in `etc/*.yaml`.
- Created main entry points for each service in `objectstory.go`, `player.go`, and `shop.go`.
- Removed unused user update handler and user API files.
- Added utility functions for context management and HTTP header parsing.
- Introduced PostgreSQL backup configuration in `backup/postgreSql.yaml`.
This commit is contained in:
wwweww
2026-02-28 18:35:56 +08:00
parent d2f33b4b96
commit 19cc7a778c
349 changed files with 42548 additions and 1453 deletions
+7 -6
View File
@@ -1,9 +1,10 @@
CREATE TABLE comment_likes (
comment_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
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)
PRIMARY KEY (comment_id, user_id)
);
CREATE INDEX idx_comment_likes_lookup ON comment_likes(user_id, comment_id);
CREATE INDEX idx_comment_likes_lookup ON comment_likes (user_id, comment_id);
+13 -12
View File
@@ -1,21 +1,22 @@
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 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_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)
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)
CREATE INDEX idx_comments_post_likes ON comments (post_id, like_count DESC, created_at)
WHERE deleted_at IS NULL;
+8 -7
View File
@@ -1,14 +1,15 @@
CREATE TABLE post_likes (
post_id BIGINT NOT NULL,
user_id BIGINT NOT NULL,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
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)
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_lookup ON post_likes (user_id, post_id);
-- [核心索引] 优化 "我赞过的帖子" 列表
CREATE INDEX idx_post_likes_user_timeline ON post_likes(user_id, created_at DESC);
CREATE INDEX idx_post_likes_user_timeline ON post_likes (user_id, created_at DESC);
+12 -13
View File
@@ -1,17 +1,16 @@
CREATE TABLE dispute_timeline (
id BIGINT PRIMARY KEY,
dispute_id BIGINT NOT NULL REFERENCES disputes(id),
event_type VARCHAR(30) NOT NULL,
actor_id BIGINT,
actor_name VARCHAR(100),
details JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CREATE TABLE dispute_timeline
(
id BIGINT PRIMARY KEY,
dispute_id BIGINT NOT NULL REFERENCES disputes (id),
event_type VARCHAR(30) NOT NULL,
actor_id BIGINT,
actor_name VARCHAR(100),
details JSONB,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT chk_event_type CHECK (event_type IN (
'created', 'response', 'reviewing', 'resolved', 'appealed'
))
CONSTRAINT chk_event_type CHECK (event_type IN ('created', 'response', 'reviewing', 'resolved', 'appealed'))
);
CREATE INDEX idx_timeline_dispute ON dispute_timeline(dispute_id, created_at);
CREATE INDEX idx_timeline_dispute_created ON dispute_timeline(dispute_id, created_at);
CREATE INDEX idx_timeline_dispute ON dispute_timeline (dispute_id, created_at);
CREATE INDEX idx_timeline_dispute_created ON dispute_timeline (dispute_id, created_at);
CREATE INDEX idx_timeline_details ON dispute_timeline USING gin(details);
+32 -30
View File
@@ -1,49 +1,51 @@
CREATE TABLE disputes (
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL UNIQUE,
initiator_id BIGINT NOT NULL,
initiator_name VARCHAR(100) NOT NULL,
respondent_id BIGINT NOT NULL,
reason TEXT NOT NULL,
evidence TEXT[] DEFAULT ARRAY[]::TEXT[],
status VARCHAR(20) NOT NULL DEFAULT 'open',
result VARCHAR(30),
respondent_reason TEXT,
respondent_evidence TEXT[] DEFAULT ARRAY[]::TEXT[],
appeal_reason TEXT,
appealed_at TIMESTAMPTZ,
resolved_by BIGINT,
resolved_at TIMESTAMPTZ,
search_text TEXT GENERATED ALWAYS AS (
initiator_name || ' ' || reason || ' ' || coalesce(respondent_reason, '') || ' ' || coalesce(appeal_reason, '')
) STORED,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CREATE TABLE disputes
(
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL UNIQUE,
initiator_id BIGINT NOT NULL,
initiator_name VARCHAR(100) NOT NULL,
respondent_id BIGINT NOT NULL,
reason TEXT NOT NULL,
evidence TEXT[] DEFAULT ARRAY[]::TEXT[],
status VARCHAR(20) NOT NULL DEFAULT 'open',
result VARCHAR(30),
respondent_reason TEXT,
respondent_evidence TEXT[] DEFAULT ARRAY[]::TEXT[],
appeal_reason TEXT,
appealed_at TIMESTAMPTZ,
resolved_by BIGINT,
resolved_at TIMESTAMPTZ,
search_text TEXT GENERATED ALWAYS AS (initiator_name || ' ' || reason || ' ' ||
coalesce(respondent_reason, '') || ' ' ||
coalesce(appeal_reason, '')) STORED,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT chk_dispute_status CHECK (status IN ('open', 'reviewing', 'resolved', 'appealed')),
CONSTRAINT chk_dispute_result CHECK (result IS NULL OR result IN ('full_refund', 'full_payment', 'partial_refund'))
CONSTRAINT chk_dispute_status CHECK (status IN ('open', 'reviewing', 'resolved', 'appealed')),
CONSTRAINT chk_dispute_result CHECK (result IS NULL OR result IN ('full_refund', 'full_payment', 'partial_refund'))
);
-- 基础索引
CREATE INDEX idx_disputes_order ON disputes(order_id);
CREATE INDEX idx_disputes_status ON disputes(status, created_at DESC);
CREATE INDEX idx_disputes_initiator ON disputes(initiator_id);
CREATE INDEX idx_disputes_order ON disputes (order_id);
CREATE INDEX idx_disputes_status ON disputes (status, created_at DESC);
CREATE INDEX idx_disputes_initiator ON disputes (initiator_id);
-- 三元组索引用于争议内容搜索
CREATE INDEX idx_disputes_search_trgm ON disputes USING gin(search_text gin_trgm_ops);
-- 复合索引优化状态查询
CREATE INDEX idx_disputes_status_created ON disputes(status, created_at DESC);
CREATE INDEX idx_disputes_status_created ON disputes (status, created_at DESC);
-- 参与者索引
CREATE INDEX idx_disputes_initiator_status ON disputes(initiator_id, status, created_at DESC);
CREATE INDEX idx_disputes_respondent_status ON disputes(respondent_id, status, created_at DESC);
CREATE INDEX idx_disputes_initiator_status ON disputes (initiator_id, status, created_at DESC);
CREATE INDEX idx_disputes_respondent_status ON disputes (respondent_id, status, created_at DESC);
-- 数组索引优化证据查询
CREATE INDEX idx_disputes_evidence ON disputes USING gin(evidence);
CREATE INDEX idx_disputes_respondent_evidence ON disputes USING gin(respondent_evidence);
CREATE TRIGGER trigger_disputes_updated_at
BEFORE UPDATE ON disputes
BEFORE UPDATE
ON disputes
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();
+24 -24
View File
@@ -1,37 +1,37 @@
CREATE TABLE reviews (
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL,
from_user_id BIGINT NOT NULL,
from_user_name VARCHAR(100) NOT NULL,
from_user_avatar TEXT,
to_user_id BIGINT NOT NULL,
rating SMALLINT NOT NULL,
content TEXT,
sealed BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
unsealed_at TIMESTAMPTZ,
CONSTRAINT chk_rating_range CHECK (rating >= 1 AND rating <= 5),
UNIQUE(order_id, from_user_id)
CREATE TABLE reviews
(
id BIGINT PRIMARY KEY,
order_id BIGINT NOT NULL,
from_user_id BIGINT NOT NULL,
from_user_name VARCHAR(100) NOT NULL,
from_user_avatar TEXT,
to_user_id BIGINT NOT NULL,
rating SMALLINT NOT NULL,
content TEXT,
sealed BOOLEAN DEFAULT TRUE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
unsealed_at TIMESTAMPTZ,
CONSTRAINT chk_rating_range CHECK (rating >= 1 AND rating <= 5),
UNIQUE (order_id, from_user_id)
);
-- 基础索引
CREATE INDEX idx_reviews_order ON reviews(order_id);
CREATE INDEX idx_reviews_to_user ON reviews(to_user_id, created_at
CREATE INDEX idx_reviews_to_user ON reviews(to_user_id, created_at DESC) WHERE sealed = FALSE;
CREATE INDEX idx_reviews_from_user ON reviews(from_user_id);
CREATE INDEX idx_reviews_order ON reviews (order_id);
CREATE INDEX idx_reviews_to_user ON reviews (to_user_id, created_at
CREATE INDEX idx_reviews_to_user ON reviews(to_user_id, created_at DESC)
WHERE sealed = FALSE;
CREATE INDEX idx_reviews_from_user ON reviews (from_user_id);
-- 三元组索引用于评价内容搜索
CREATE INDEX idx_reviews_content_trgm ON reviews USING gin(content gin_trgm_ops)
CREATE INDEX idx_reviews_content_trgm ON reviews USING gin (content gin_trgm_ops)
WHERE sealed = FALSE AND content IS NOT NULL;
-- 复合索引优化用户评价列表
CREATE INDEX idx_reviews_to_user_rating ON reviews(to_user_id, rating DESC, created_at DESC)
CREATE INDEX idx_reviews_to_user_rating ON reviews (to_user_id, rating DESC, created_at DESC)
WHERE sealed = FALSE;
-- 复合索引优化订单评价查询
CREATE INDEX idx_reviews_order_sealed ON reviews(order_id, sealed);
CREATE INDEX idx_reviews_order_sealed ON reviews (order_id, sealed);
-- 评分统计索引
CREATE INDEX idx_reviews_rating_created ON reviews(rating, created_at DESC) WHERE sealed = FALSE;
CREATE INDEX idx_reviews_rating_created ON reviews (rating, created_at DESC) WHERE sealed = FALSE;
+20 -20
View File
@@ -1,33 +1,33 @@
CREATE TABLE wallet_transactions (
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
type VARCHAR(20) NOT NULL,
amount DECIMAL(12,2) NOT NULL,
balance_after DECIMAL(12,2) NOT NULL,
description VARCHAR(500) NOT NULL,
order_id BIGINT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
search_text TEXT GENERATED ALWAYS AS (
type || ' ' || description
) STORED,
CREATE TABLE wallet_transactions
(
id BIGINT PRIMARY KEY,
user_id BIGINT NOT NULL,
type VARCHAR(20) NOT NULL,
amount DECIMAL(12, 2) NOT NULL,
balance_after DECIMAL(12, 2) NOT NULL,
description VARCHAR(500) NOT NULL,
order_id BIGINT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
search_text TEXT GENERATED ALWAYS AS (
type || ' ' || description
) STORED,
CONSTRAINT chk_transaction_type CHECK (type IN ('topup', 'payment', 'income', 'withdrawal', 'refund'))
CONSTRAINT chk_transaction_type CHECK (type IN ('topup', 'payment', 'income', 'withdrawal', 'refund'))
);
-- 基础索引
CREATE INDEX idx_transactions_user ON wallet_transactions(user_id, created_at DESC);
CREATE INDEX idx_transactions_order ON wallet_transactions(order_id) WHERE order_id IS NOT NULL;
CREATE INDEX idx_transactions_type ON wallet_transactions(user_id, type, created_at DESC);
CREATE INDEX idx_transactions_user ON wallet_transactions (user_id, created_at DESC);
CREATE INDEX idx_transactions_order ON wallet_transactions (order_id) WHERE order_id IS NOT NULL;
CREATE INDEX idx_transactions_type ON wallet_transactions (user_id, type, created_at DESC);
-- 三元组索引用于交易描述搜索
CREATE INDEX idx_transactions_search_trgm ON wallet_transactions USING gin(search_text gin_trgm_ops);
-- 复合索引优化用户交易查询
CREATE INDEX idx_transactions_user_type_created ON wallet_transactions(user_id, type, created_at DESC);
CREATE INDEX idx_transactions_user_type_created ON wallet_transactions (user_id, type, created_at DESC);
-- 时间范围索引 (用于统计)
CREATE INDEX idx_transactions_created_amount ON wallet_transactions(created_at DESC, amount);
CREATE INDEX idx_transactions_created_amount ON wallet_transactions (created_at DESC, amount);
-- 订单关联索引
CREATE INDEX idx_transactions_order_type ON wallet_transactions(order_id, type)
WHERE order_id IS NOT NULL;
CREATE INDEX idx_transactions_order_type ON wallet_transactions (order_id, type) WHERE order_id IS NOT NULL;
+12 -10
View File
@@ -1,17 +1,19 @@
CREATE TABLE wallets (
user_id BIGINT PRIMARY KEY,
balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
frozen_balance DECIMAL(12,2) NOT NULL DEFAULT 0.00,
version INT NOT NULL DEFAULT 1, -- 必须使用乐观锁
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CREATE TABLE wallets
(
user_id BIGINT PRIMARY KEY,
balance DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
frozen_balance DECIMAL(12, 2) NOT NULL DEFAULT 0.00,
version INT NOT NULL DEFAULT 1, -- 必须使用乐观锁
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
CONSTRAINT chk_balance_non_negative CHECK (balance >= 0),
CONSTRAINT chk_frozen_non_negative CHECK (frozen_balance >= 0)
CONSTRAINT chk_balance_non_negative CHECK (balance >= 0),
CONSTRAINT chk_frozen_non_negative CHECK (frozen_balance >= 0)
);
CREATE INDEX idx_wallets_updated ON wallets(updated_at DESC);
CREATE INDEX idx_wallets_updated ON wallets (updated_at DESC);
CREATE TRIGGER trigger_wallets_updated_at
BEFORE UPDATE ON wallets
BEFORE UPDATE
ON wallets
FOR EACH ROW
EXECUTE FUNCTION update_updated_at_column();