From 4b8120d83f743a565c0120b4b39aa40388b51d8b Mon Sep 17 00:00:00 2001 From: hyungi Date: Tue, 12 May 2026 22:05:06 +0000 Subject: [PATCH] =?UTF-8?q?feat(briefing):=20date=20picker=20+=20=EC=B9=B4?= =?UTF-8?q?=EB=93=9C=EB=B3=84=20=EC=9D=BD=EC=9D=8C/=ED=95=98=EC=9D=B4?= =?UTF-8?q?=EB=9D=BC=EC=9D=B4=ED=8A=B8=20=EC=95=A1=EC=85=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 사용자 요청 (2026-05-13): - 오늘 briefing 만 보여주고 과거 못 보는 게 아쉬움 → 날짜 선택 UI - 시간대 별 나열은 오히려 불편 → date dropdown 1단계 선택 - 각 카드에 읽음/하이라이트 토글 Schema (migrations 263~266, 단일 statement): - briefing_topics.is_read BOOL NOT NULL DEFAULT false - briefing_topics.read_at TIMESTAMPTZ - briefing_topics.highlighted BOOL NOT NULL DEFAULT false - briefing_topics.highlighted_at TIMESTAMPTZ API (app/api/briefing.py): - TopicResponse 에 id / is_read / read_at / highlighted / highlighted_at 추가 - GET /api/briefing/dates → 사용 가능 날짜 목록 (60일 cap) · briefing_date / total_topics / total_articles / status / read_count / highlighted_count - PATCH /api/briefing/topics/{id}/read body {value: bool} → 읽음 토글 - PATCH /api/briefing/topics/{id}/highlight body {value: bool} → 하이라이트 토글 - 토글 시 *_at 컬럼 자동 설정/NULL UI (frontend/src/routes/news/+page.svelte): - 헤더 우측 + + {#each availableDates as d} + + {/each} + + + {/if} +

{#if briefing} {briefing.briefing_date} 새벽 수집 · 총 {briefing.total_articles}건 / {briefing.total_countries}개국 / {briefing.total_topics}개 토픽 @@ -137,8 +225,9 @@ {/if} - {#each briefing.topics as topic (topic.topic_rank)} - + {#each briefing.topics as topic (topic.id)} +

+
#{topic.topic_rank} @@ -154,6 +243,24 @@ {topic.country_count}개국 · {topic.article_count}건

+
+ + +
{#if topic.country_perspectives.length > 0} @@ -210,6 +317,7 @@ {/if}
+ {/each} {/if} {/if} diff --git a/migrations/263_briefing_topics_is_read.sql b/migrations/263_briefing_topics_is_read.sql new file mode 100644 index 0000000..bf531cc --- /dev/null +++ b/migrations/263_briefing_topics_is_read.sql @@ -0,0 +1,3 @@ +-- 2026-05-13 briefing topic 읽음 표시 — UI 의 카드별 액션. +ALTER TABLE briefing_topics + ADD COLUMN IF NOT EXISTS is_read BOOLEAN NOT NULL DEFAULT false; diff --git a/migrations/264_briefing_topics_read_at.sql b/migrations/264_briefing_topics_read_at.sql new file mode 100644 index 0000000..9cf08a3 --- /dev/null +++ b/migrations/264_briefing_topics_read_at.sql @@ -0,0 +1,3 @@ +-- 2026-05-13 briefing topic 읽음 시각 — read 토글 시 now() 설정 / 해제 시 NULL. +ALTER TABLE briefing_topics + ADD COLUMN IF NOT EXISTS read_at TIMESTAMPTZ; diff --git a/migrations/265_briefing_topics_highlighted.sql b/migrations/265_briefing_topics_highlighted.sql new file mode 100644 index 0000000..f452b38 --- /dev/null +++ b/migrations/265_briefing_topics_highlighted.sql @@ -0,0 +1,3 @@ +-- 2026-05-13 briefing topic 하이라이트 — UI 의 카드별 액션. +ALTER TABLE briefing_topics + ADD COLUMN IF NOT EXISTS highlighted BOOLEAN NOT NULL DEFAULT false; diff --git a/migrations/266_briefing_topics_highlighted_at.sql b/migrations/266_briefing_topics_highlighted_at.sql new file mode 100644 index 0000000..ea18690 --- /dev/null +++ b/migrations/266_briefing_topics_highlighted_at.sql @@ -0,0 +1,3 @@ +-- 2026-05-13 briefing topic 하이라이트 시각 — highlight 토글 시 now() 설정 / 해제 시 NULL. +ALTER TABLE briefing_topics + ADD COLUMN IF NOT EXISTS highlighted_at TIMESTAMPTZ;