/** * Repository Interface: IAchievementRepository * * Defines operations for Achievement and UserAchievement entities */ import type { Achievement, AchievementCategory } from '../entities/Achievement'; import type { UserAchievement } from '../entities/UserAchievement'; export interface IAchievementRepository { // Achievement operations findAchievementById(id: string): Promise; findAllAchievements(): Promise; findAchievementsByCategory(category: AchievementCategory): Promise; createAchievement(achievement: Achievement): Promise; // UserAchievement operations findUserAchievementById(id: string): Promise; findUserAchievementsByUserId(userId: string): Promise; findUserAchievementByUserAndAchievement(userId: string, achievementId: string): Promise; hasUserEarnedAchievement(userId: string, achievementId: string): Promise; createUserAchievement(userAchievement: UserAchievement): Promise; updateUserAchievement(userAchievement: UserAchievement): Promise; // Stats getAchievementLeaderboard(limit: number): Promise<{ userId: string; points: number; count: number }[]>; getUserAchievementStats(userId: string): Promise<{ total: number; points: number; byCategory: Record }>; }