Files
GovAI/server/migrations/000003_reviews_favorites_ratings.up.sql
T
2026-06-15 23:48:37 +08:00

52 lines
2.0 KiB
SQL

-- 000003: 审核表、收藏表、评分表
-- 应用审核表
CREATE TABLE app_reviews (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
app_id UUID NOT NULL REFERENCES applications(id) ON DELETE CASCADE,
version VARCHAR(20) NOT NULL,
submitter_id UUID NOT NULL REFERENCES users(id),
reviewer_id UUID REFERENCES users(id),
status VARCHAR(20) NOT NULL DEFAULT 'pending'
CHECK (status IN ('pending', 'approved', 'rejected', 'withdrawn')),
submit_comment TEXT,
review_comment TEXT,
submitted_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
reviewed_at TIMESTAMPTZ,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX idx_reviews_app ON app_reviews(app_id);
CREATE INDEX idx_reviews_status ON app_reviews(status);
CREATE INDEX idx_reviews_submitter ON app_reviews(submitter_id);
-- 收藏表
CREATE TABLE app_favorites (
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
app_id UUID NOT NULL REFERENCES applications(id) ON DELETE CASCADE,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
PRIMARY KEY (user_id, app_id)
);
CREATE INDEX idx_favorites_user ON app_favorites(user_id);
CREATE INDEX idx_favorites_app ON app_favorites(app_id);
-- 评分表
CREATE TABLE app_ratings (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
app_id UUID NOT NULL REFERENCES applications(id) ON DELETE CASCADE,
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
score SMALLINT NOT NULL CHECK (score >= 1 AND score <= 5),
comment TEXT,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
UNIQUE(app_id, user_id)
);
CREATE INDEX idx_ratings_app ON app_ratings(app_id);
CREATE INDEX idx_ratings_user ON app_ratings(user_id);
CREATE TRIGGER update_ratings_updated_at
BEFORE UPDATE ON app_ratings
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();