h-lab/src/main/java/com/hlab/yanalyst/domain/channel/ChannelRole.java
hehihoho3@gmail.com f96e4c583d feat: 소재 피드 롱폼만 수집 — 경쟁 채널 쇼츠 수집 제거
피드 수집이 역할(SOURCE/RIVAL)과 무관하게 롱폼만 저장하도록 변경.
쇼츠는 이미 잘린 결과물이라 자를 원본(소재)이 아니므로 수집 대상에서 제외.
UI 문구(경쟁 쇼츠 → 경쟁 채널)와 길이 필터도 함께 정리.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-07 11:50:47 +09:00

49 lines
1.9 KiB
Java

package com.hlab.yanalyst.domain.channel;
/**
* 등록 채널의 역할.
*
* <ul>
* <li>{@link #MY} — 벤치마킹용 등록 채널. 영상이 수집함으로 들어가 소재 후보가 된다.</li>
* <li>{@link #OWN} — 내가 운영하는 채널. 이미 발행한 결과물이라 소재가 아니므로
* 수집함·칸반·발굴·피드 어디에도 섞이지 않고 내 채널 분석 화면에서만 쓰인다.</li>
* <li>{@link #SOURCE} — 소재 원본 채널(웹예능 공식채널). 롱폼만 피드에 수집한다.</li>
* <li>{@link #RIVAL} — 경쟁 채널(같은 소재를 다루는 클립 채널). 역시 롱폼만 피드에 수집한다.</li>
* </ul>
*
* ddl-auto:update 로 컬럼이 추가되므로 기존 행은 role 이 null 이다. null 은 항상 {@link #MY} 로 취급한다.
*/
public final class ChannelRole {
public static final String MY = "MY";
public static final String OWN = "OWN";
public static final String SOURCE = "SOURCE";
public static final String RIVAL = "RIVAL";
private ChannelRole() {}
/** null/공백/미인식 값을 MY 로 보정하고 대문자로 정규화한다. */
public static String normalize(String role) {
if (role == null || role.isBlank()) return MY;
String r = role.trim().toUpperCase();
return switch (r) {
case SOURCE, RIVAL, OWN, MY -> r;
default -> MY;
};
}
/**
* 이 역할의 채널에서 수집한 영상에 붙일 출처(ChannelVideo.source).
* 수집함/발굴 쿼리는 CHANNEL·SEARCH 만 보므로, OWN 은 자동으로 격리된다.
*/
public static String videoSource(String role) {
return OWN.equals(normalize(role)) ? OWN : "CHANNEL";
}
/** 피드(소재 원본/경쟁) 역할인지. */
public static boolean isFeed(String role) {
String r = normalize(role);
return SOURCE.equals(r) || RIVAL.equals(r);
}
}