From f96e4c583d6124203b36f64fbd395d12d8e58b80 Mon Sep 17 00:00:00 2001 From: "hehihoho3@gmail.com" Date: Fri, 7 Aug 2026 11:50:47 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=86=8C=EC=9E=AC=20=ED=94=BC=EB=93=9C?= =?UTF-8?q?=20=EB=A1=B1=ED=8F=BC=EB=A7=8C=20=EC=88=98=EC=A7=91=20=E2=80=94?= =?UTF-8?q?=20=EA=B2=BD=EC=9F=81=20=EC=B1=84=EB=84=90=20=EC=87=BC=EC=B8=A0?= =?UTF-8?q?=20=EC=88=98=EC=A7=91=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 피드 수집이 역할(SOURCE/RIVAL)과 무관하게 롱폼만 저장하도록 변경. 쇼츠는 이미 잘린 결과물이라 자를 원본(소재)이 아니므로 수집 대상에서 제외. UI 문구(경쟁 쇼츠 → 경쟁 채널)와 길이 필터도 함께 정리. Co-Authored-By: Claude Fable 5 --- .../yanalyst/domain/channel/ChannelRole.java | 7 +----- .../domain/channel/ChannelService.java | 7 +++--- .../domain/channel/FeedCollectionService.java | 2 +- src/main/resources/application.yml | 2 +- src/main/resources/templates/feed.html | 22 +++++++++---------- 5 files changed, 17 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/hlab/yanalyst/domain/channel/ChannelRole.java b/src/main/java/com/hlab/yanalyst/domain/channel/ChannelRole.java index 0f44fce..66cc7f8 100644 --- a/src/main/java/com/hlab/yanalyst/domain/channel/ChannelRole.java +++ b/src/main/java/com/hlab/yanalyst/domain/channel/ChannelRole.java @@ -8,7 +8,7 @@ package com.hlab.yanalyst.domain.channel; *
  • {@link #OWN} — 내가 운영하는 채널. 이미 발행한 결과물이라 소재가 아니므로 * 수집함·칸반·발굴·피드 어디에도 섞이지 않고 내 채널 분석 화면에서만 쓰인다.
  • *
  • {@link #SOURCE} — 소재 원본 채널(웹예능 공식채널). 롱폼만 피드에 수집한다.
  • - *
  • {@link #RIVAL} — 경쟁 쇼츠 채널(같은 소재를 다루는 클립 채널). 쇼츠만 피드에 수집한다.
  • + *
  • {@link #RIVAL} — 경쟁 채널(같은 소재를 다루는 클립 채널). 역시 롱폼만 피드에 수집한다.
  • * * * ddl-auto:update 로 컬럼이 추가되므로 기존 행은 role 이 null 이다. null 은 항상 {@link #MY} 로 취급한다. @@ -45,9 +45,4 @@ public final class ChannelRole { String r = normalize(role); return SOURCE.equals(r) || RIVAL.equals(r); } - - /** 해당 역할이 수집할 영상 포맷 — SOURCE 는 롱폼만, RIVAL 은 쇼츠만. */ - public static boolean acceptsShorts(String role) { - return RIVAL.equals(normalize(role)); - } } diff --git a/src/main/java/com/hlab/yanalyst/domain/channel/ChannelService.java b/src/main/java/com/hlab/yanalyst/domain/channel/ChannelService.java index 67dc7ed..475d09b 100644 --- a/src/main/java/com/hlab/yanalyst/domain/channel/ChannelService.java +++ b/src/main/java/com/hlab/yanalyst/domain/channel/ChannelService.java @@ -390,7 +390,7 @@ public class ChannelService { /** * 피드 시드 채널의 최근 업로드를 1페이지(최대 50건)만 수집한다. - * 소스 채널은 롱폼만, 경쟁 채널은 쇼츠만 저장한다. + * 역할과 무관하게 롱폼만 저장한다 — 쇼츠는 이미 잘린 결과물이라 소재가 아니다. * * @param channel SOURCE 또는 RIVAL 역할의 채널 * @param publishedAfter 이 시각 이후 업로드만 수집 @@ -422,10 +422,9 @@ public class ChannelService { } if (videoIds.isEmpty()) return 0; - // SOURCE = 롱폼만(공식계정 쇼츠는 이미 잘린 결과물), RIVAL = 쇼츠만 - Boolean shortsOnly = ChannelRole.acceptsShorts(role); + // 피드는 롱폼만 수집한다 (쇼츠는 이미 잘린 결과물 — 자를 원본이 아니다) String source = ChannelRole.RIVAL.equals(role) ? ChannelRole.RIVAL : ChannelRole.SOURCE; - return upsertVideos(channel, videoIds, source, shortsOnly, publishedAfter); + return upsertVideos(channel, videoIds, source, Boolean.FALSE, publishedAfter); } diff --git a/src/main/java/com/hlab/yanalyst/domain/channel/FeedCollectionService.java b/src/main/java/com/hlab/yanalyst/domain/channel/FeedCollectionService.java index 696c25e..6736e6e 100644 --- a/src/main/java/com/hlab/yanalyst/domain/channel/FeedCollectionService.java +++ b/src/main/java/com/hlab/yanalyst/domain/channel/FeedCollectionService.java @@ -18,7 +18,7 @@ import java.util.Map; /** * 소재 발굴 피드 수집기. * - *

    SOURCE(웹예능 공식채널)의 신규 롱폼과 RIVAL(경쟁 예능짤 채널)의 신규 쇼츠를 주기적으로 받아온다. + *

    SOURCE(웹예능 공식채널)와 RIVAL(경쟁 클립 채널)의 신규 롱폼을 주기적으로 받아온다(쇼츠는 수집하지 않는다). * uploads 플레이리스트 1페이지만 조회하므로 채널당 약 2 units — 검색(search.list 100 units)보다 훨씬 싸다. */ @Slf4j diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 0f9cfca..e91960d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -100,7 +100,7 @@ hlab: # 발굴 대상 포맷 기본값: LONG_FORM(롱폼) | SHORTS. UI '지금 발굴'에서 건별 선택 가능. format: ${DISCOVERY_FORMAT:LONG_FORM} - # 소재 발굴 피드: 소스(웹예능 공식채널) 신규 롱폼 + 경쟁(예능짤) 신규 쇼츠를 최신순으로 수집 + # 소재 발굴 피드: 소스(웹예능 공식채널)·경쟁(클립 채널)의 신규 롱폼만 최신순으로 수집 (쇼츠 제외) feed: enabled: ${FEED_ENABLED:true} cron: ${FEED_CRON:0 15 */3 * * *} # 3시간마다 (소재 선점은 업로드 후 몇 시간이 승부) diff --git a/src/main/resources/templates/feed.html b/src/main/resources/templates/feed.html index 6d62644..59a9a9f 100644 --- a/src/main/resources/templates/feed.html +++ b/src/main/resources/templates/feed.html @@ -11,7 +11,7 @@