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); }