nordabiz/database/migrations/019_announcement_reads.sql
Maciej Pienczyn a172f7af49 feat(announcements): Śledzenie odczytów ogłoszeń (seen by)
- Nowa tabela announcement_reads do śledzenia kto przeczytał
- Avatary użytkowników z inicjałami (tooltip z nazwiskiem)
- Statystyki: liczba i procent użytkowników którzy przeczytali
- Progress bar wizualizujący zasięg ogłoszenia
- Automatyczny zapis odczytu przy otwarciu ogłoszenia

Autor: Maciej Pienczyn
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-27 08:19:39 +01:00

31 lines
1.4 KiB
SQL

-- ============================================================
-- Migration: 019_announcement_reads.sql
-- Description: Śledzenie odczytów ogłoszeń (seen by)
-- Author: Claude
-- Date: 2026-01-27
-- ============================================================
-- Tabela przechowująca informacje o odczytach ogłoszeń
CREATE TABLE IF NOT EXISTS announcement_reads (
id SERIAL PRIMARY KEY,
announcement_id INTEGER NOT NULL REFERENCES announcements(id) ON DELETE CASCADE,
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
read_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- Unikalna kombinacja - użytkownik może przeczytać ogłoszenie tylko raz
UNIQUE(announcement_id, user_id)
);
-- Indeksy dla szybkiego wyszukiwania
CREATE INDEX IF NOT EXISTS idx_announcement_reads_announcement ON announcement_reads(announcement_id);
CREATE INDEX IF NOT EXISTS idx_announcement_reads_user ON announcement_reads(user_id);
CREATE INDEX IF NOT EXISTS idx_announcement_reads_read_at ON announcement_reads(read_at DESC);
-- Uprawnienia
GRANT ALL ON TABLE announcement_reads TO nordabiz_app;
GRANT USAGE, SELECT ON SEQUENCE announcement_reads_id_seq TO nordabiz_app;
-- Komentarze
COMMENT ON TABLE announcement_reads IS 'Śledzenie kto przeczytał które ogłoszenie (seen by)';
COMMENT ON COLUMN announcement_reads.read_at IS 'Data i czas pierwszego odczytu';