/** * 간격 반복 관련 인터페이스 정의 * 의존성 역전 원칙 (DIP) 적용 */ import type { IntervalCalculationResult, MemoryData, ReviewPerformance, ReviewPriority, ReviewSchedule, SpacedRepetitionFeatures } from '../types/spaced-repetition.types.js'; /** * 간격 계산 전략 인터페이스 */ export interface IntervalCalculationStrategy { calculateInterval(currentInterval: number, features: SpacedRepetitionFeatures): IntervalCalculationResult; } /** * 리콜 확률 계산 인터페이스 */ export interface RecallProbabilityCalculator { calculateRecallProbability(timeSinceLastReview: number, interval: number): number; } /** * 리뷰 필요성 판단 인터페이스 */ export interface ReviewNecessityChecker { needsReview(timeSinceLastReview: number, interval: number, threshold?: number): boolean; } /** * 리뷰 스케줄링 인터페이스 */ export interface ReviewScheduler { createReviewSchedule(memoryId: string, currentInterval: number, lastReviewDate: Date, features: SpacedRepetitionFeatures): ReviewSchedule; createBatchReviewSchedules(memories: MemoryData[]): ReviewSchedule[]; } /** * 성과 분석 인터페이스 */ export interface PerformanceAnalyzer { analyzeReviewPerformance(schedules: ReviewSchedule[], actualRecall: Map): ReviewPerformance; } /** * 우선순위 계산 인터페이스 */ export interface PriorityCalculator { calculateReviewPriority(schedule: ReviewSchedule): number; calculateBatchPriorities(schedules: ReviewSchedule[]): ReviewPriority[]; } /** * 최적 간격 추천 인터페이스 */ export interface OptimalIntervalRecommender { recommendOptimalInterval(currentInterval: number, recallHistory: boolean[], features: SpacedRepetitionFeatures): number; } /** * 간격 반복 서비스 메인 인터페이스 */ export interface SpacedRepetitionService { calculateNextInterval(currentInterval: number, features: SpacedRepetitionFeatures): number; calculateRecallProbability(timeSinceLastReview: number, interval: number): number; needsReview(timeSinceLastReview: number, interval: number, threshold?: number): boolean; createReviewSchedule(memoryId: string, currentInterval: number, lastReviewDate: Date, features: SpacedRepetitionFeatures): ReviewSchedule; createBatchReviewSchedules(memories: MemoryData[]): ReviewSchedule[]; calculateReviewPriority(schedule: ReviewSchedule): number; analyzeReviewPerformance(schedules: ReviewSchedule[], actualRecall: Map): ReviewPerformance; recommendOptimalInterval(currentInterval: number, recallHistory: boolean[], features: SpacedRepetitionFeatures): number; } //# sourceMappingURL=spaced-repetition.interface.d.ts.map