52 lines
2.0 KiB
SQL
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();
|