- Add ClassifiedInterest model for tracking user interest in listings - Add ClassifiedQuestion model for public Q&A on listings - Add context_type/context_id to PrivateMessage for B2B linking - Add interest toggle button and interests list modal - Add Q&A section with ask/answer/hide functionality - Update messages to show B2B context badge - Create migration 034_classified_interactions.sql Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
77 lines
3.5 KiB
SQL
77 lines
3.5 KiB
SQL
-- Migration: B2B Classified Interactions
|
|
-- Date: 2026-01-31
|
|
-- Description: Dodanie tabel dla interakcji z ogłoszeniami B2B:
|
|
-- - classified_interests (zainteresowania)
|
|
-- - classified_questions (pytania i odpowiedzi publiczne)
|
|
-- - context_type/context_id w private_messages (powiązanie wiadomości z ogłoszeniem)
|
|
|
|
-- ============================================================
|
|
-- 1. Tabela zainteresowań ogłoszeniami
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS classified_interests (
|
|
id SERIAL PRIMARY KEY,
|
|
classified_id INTEGER NOT NULL REFERENCES classifieds(id) ON DELETE CASCADE,
|
|
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
message VARCHAR(255), -- opcjonalna krótka notatka
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
UNIQUE(classified_id, user_id)
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_classified_interests_classified ON classified_interests(classified_id);
|
|
CREATE INDEX IF NOT EXISTS idx_classified_interests_user ON classified_interests(user_id);
|
|
|
|
COMMENT ON TABLE classified_interests IS 'Zainteresowania użytkowników ogłoszeniami B2B';
|
|
COMMENT ON COLUMN classified_interests.message IS 'Opcjonalna krótka notatka do zainteresowania';
|
|
|
|
-- ============================================================
|
|
-- 2. Tabela pytań i odpowiedzi publicznych
|
|
-- ============================================================
|
|
|
|
CREATE TABLE IF NOT EXISTS classified_questions (
|
|
id SERIAL PRIMARY KEY,
|
|
classified_id INTEGER NOT NULL REFERENCES classifieds(id) ON DELETE CASCADE,
|
|
author_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
content TEXT NOT NULL,
|
|
|
|
-- Odpowiedź właściciela ogłoszenia
|
|
answer TEXT,
|
|
answered_by INTEGER REFERENCES users(id),
|
|
answered_at TIMESTAMP,
|
|
|
|
-- Widoczność
|
|
is_public BOOLEAN DEFAULT TRUE,
|
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
);
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_classified_questions_classified ON classified_questions(classified_id);
|
|
CREATE INDEX IF NOT EXISTS idx_classified_questions_author ON classified_questions(author_id);
|
|
CREATE INDEX IF NOT EXISTS idx_classified_questions_unanswered ON classified_questions(classified_id) WHERE answer IS NULL;
|
|
|
|
COMMENT ON TABLE classified_questions IS 'Publiczne pytania i odpowiedzi do ogłoszeń B2B';
|
|
COMMENT ON COLUMN classified_questions.is_public IS 'Czy pytanie jest widoczne publicznie (autor ogłoszenia może ukryć)';
|
|
|
|
-- ============================================================
|
|
-- 3. Kontekst w wiadomościach prywatnych
|
|
-- ============================================================
|
|
|
|
-- Dodaj kolumny kontekstu do private_messages
|
|
ALTER TABLE private_messages
|
|
ADD COLUMN IF NOT EXISTS context_type VARCHAR(50),
|
|
ADD COLUMN IF NOT EXISTS context_id INTEGER;
|
|
|
|
CREATE INDEX IF NOT EXISTS idx_private_messages_context ON private_messages(context_type, context_id) WHERE context_type IS NOT NULL;
|
|
|
|
COMMENT ON COLUMN private_messages.context_type IS 'Typ powiązanego obiektu: classified, forum_topic, etc.';
|
|
COMMENT ON COLUMN private_messages.context_id IS 'ID powiązanego obiektu';
|
|
|
|
-- ============================================================
|
|
-- 4. Uprawnienia
|
|
-- ============================================================
|
|
|
|
GRANT ALL ON TABLE classified_interests TO nordabiz_app;
|
|
GRANT ALL ON TABLE classified_questions TO nordabiz_app;
|
|
GRANT USAGE, SELECT ON SEQUENCE classified_interests_id_seq TO nordabiz_app;
|
|
GRANT USAGE, SELECT ON SEQUENCE classified_questions_id_seq TO nordabiz_app;
|