using SVSim.Database.Models; namespace SVSim.Database.Repositories.Mission; public interface IViewerMissionRepository { Task> GetMissionsAsync(long viewerId, CancellationToken ct); Task GetMissionByIdAsync(long viewerId, long missionId, CancellationToken ct); Task> GetAchievementsAsync(long viewerId, CancellationToken ct); Task GetAchievementAsync(long viewerId, int achievementType, CancellationToken ct); /// Reads counter rows for (viewerId, eventKey IN list, period IN list). Empty inputs return []. Task> GetCountersAsync( long viewerId, IReadOnlyCollection eventKeys, IReadOnlyCollection periods, CancellationToken ct); /// Single-row counter read. Returns 0 if no row exists. Task GetCounterAsync(long viewerId, string eventKey, string period, CancellationToken ct); /// Add a viewer mission row (in-memory; caller saves). void AddMission(ViewerMission row); /// Remove a viewer mission row (in-memory; caller saves). void RemoveMission(ViewerMission row); /// Add a viewer achievement row (in-memory; caller saves). void AddAchievement(ViewerAchievement row); /// Upsert a counter delta (in-memory; caller saves). Creates the row if missing. Task UpsertCounterAsync(long viewerId, string eventKey, string period, int delta, CancellationToken ct); }