| 123456789101112131415161718 |
- using Application.Abstractions.Data;
- namespace Application.Abstractions.Chat;
- /// <summary>
- /// 방송 세션별 멤버 XP 랭킹 캐시.
- /// ChatHub 에서 매 메시지마다 GROUP BY 로 전체 세션 스캔하던 비용을 회피하기 위해 Redis Sorted Set 으로 캐시.
- /// TTL 만료 시 DB 에서 재시드 — TTL 동안의 stale 은 라이브 채팅 UX 상 허용.
- /// </summary>
- public interface IChatLeaderboard
- {
- /// <summary>
- /// 세션 내 본인 점수와 본인보다 높은 점수자 수를 반환.
- /// 캐시 미스 시 DB MemberExpLog GROUP BY 로 재구축 후 캐시.
- /// 세션에 데이터 없거나 본인 항목 없으면 null.
- /// </summary>
- Task<(int MyScore, int HigherCount)?> GetRankAsync(int sessionId, int memberId, IAppDbContext db, CancellationToken ct = default);
- }
|