buhapp-backend/migrations/0004_reviews.up.sql
ga 1eb7af6bac Sprint 5: reviews and ratings
- POST /api/v1/reviews (one per chat_id, UNIQUE)
- GET  /api/v1/users/:id/reviews (public list)
- GET  /api/v1/users/:id/stats (rating_avg, count)
- migration 0004: reviews (rating 1-5, anonymous flag), user_stats aggregate
- only chat participants can review; reviewed_id is other party
2026-08-20 16:20:15 +00:00

24 lines
1.2 KiB
SQL

-- Отзывы и рейтинги после встречи
CREATE TABLE IF NOT EXISTS reviews (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
reviewer_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
reviewed_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
chat_id UUID NOT NULL REFERENCES chats(id) ON DELETE CASCADE,
rating SMALLINT NOT NULL CHECK (rating >= 1 AND rating <= 5),
body TEXT,
anonymous BOOLEAN NOT NULL DEFAULT FALSE,
created_at TIMESTAMPTZ DEFAULT NOW(),
UNIQUE (reviewer_id, chat_id), -- один отзыв на чат
CHECK (reviewer_id <> reviewed_id)
);
CREATE INDEX IF NOT EXISTS idx_reviews_reviewed ON reviews(reviewed_id, created_at DESC);
-- Агрегаты (можно считать по reviews но удобнее держать)
CREATE TABLE IF NOT EXISTS user_stats (
user_id UUID PRIMARY KEY REFERENCES users(id) ON DELETE CASCADE,
rating_avg NUMERIC(3,2) NOT NULL DEFAULT 0,
rating_count INTEGER NOT NULL DEFAULT 0,
reviews_left INTEGER NOT NULL DEFAULT 0,
last_active_at TIMESTAMPTZ DEFAULT NOW()
);