using Application.Abstractions.Data;
namespace Application.Abstractions.Stocks;
/// 트렌딩 1행 — 종목 코드·점수(랭킹 원점수).
public sealed record StockTrendingEntry(string StockCode, int Score);
///
/// 종목 가상보드 트렌딩 랭킹 Redis Sorted Set 캐시 (d2 §④·§⑥).
/// 최근 24h PostStockTag 언급량 + StockBoardStats 총 글 수를 가중 합산한 점수로 랭크한다.
/// 캐시 미스 시 DB 로 재시드(TTL ~10분) — RedisChatLeaderboard/PaperLeaderboardCache 패턴 복제.
/// 종목명 조인은 호출 핸들러가 수행(코드→점수만 캐시).
///
public interface IStockBoardTrendingCache
{
/// 상위 count 개의 (코드, 점수)를 내림차순으로 반환. 캐시 미스 시 DB 재시드. 데이터 없으면 빈 목록.
Task> GetTopAsync(int count, IAppDbContext db, CancellationToken ct = default);
/// 캐시 무효화 — 다음 조회가 최신 스냅샷으로 재시드.
Task InvalidateAsync(CancellationToken ct = default);
}