-- 174_document_reads.sql -- 자료실 회독 추적 — append-only 로그 (1/3) -- plan: ~/.claude/plans/scalable-chasing-stonebraker.md -- -- 단일 statement (asyncpg 제약). 인덱스는 175, 176 으로 분리. -- -- 동작 규칙 (사용자 명시): -- - detail 페이지 진입만으로 자동 +1 금지. 명시 클릭 시에만 row insert. -- - 같은 날 여러 번 클릭 가능 (각 row). -- - 회독 횟수 = COUNT(*), 마지막 시각 = MAX(read_at). -- - documents 에 read_count 컬럼 추가하지 않음. 본 로그만으로 집계. -- -- ownership: -- - 현재 documents 테이블에 user_id 없음 (single-user). document_reads.user_id 만으로 -- 사용자 분리. multi-user 전환 시 documents.user_id 추가 후 별도 ownership check 필요. CREATE TABLE IF NOT EXISTS document_reads ( id BIGSERIAL PRIMARY KEY, user_id BIGINT NOT NULL REFERENCES users(id) ON DELETE CASCADE, document_id BIGINT NOT NULL REFERENCES documents(id) ON DELETE CASCADE, read_at TIMESTAMPTZ NOT NULL DEFAULT NOW() );