pub struct UserStats {
pub lessons_completed: HashSet<String>,
pub lessons_by_difficulty: HashMap<Difficulty, usize>,
pub commands_used: HashSet<String>,
pub total_commands_executed: usize,
pub current_streak: usize,
pub longest_streak: usize,
pub last_active_date: NaiveDate,
pub total_time_seconds: u64,
pub session_start: DateTime<Utc>,
pub achievements: UserAchievements,
pub completed_challenges: HashSet<String>,
}Expand description
Comprehensive user statistics and progress tracking
Fields§
§lessons_completed: HashSet<String>Set of completed lesson IDs
lessons_by_difficulty: HashMap<Difficulty, usize>Count of lessons completed by difficulty level
commands_used: HashSet<String>Set of unique commands that have been used
total_commands_executed: usizeTotal number of commands executed (including duplicates)
current_streak: usizeCurrent consecutive days streak
longest_streak: usizeLongest streak ever achieved
last_active_date: NaiveDateLast date the user was active
total_time_seconds: u64Total time spent in the app (seconds)
session_start: DateTime<Utc>When the current session started
achievements: UserAchievementsUser’s achievement progress
completed_challenges: HashSet<String>Completed challenges (for exploration/challenge achievements)
Implementations§
Source§impl UserStats
impl UserStats
Sourcepub fn update_streak(&mut self)
pub fn update_streak(&mut self)
Update the streak based on current date
Sourcepub fn record_lesson_completion(
&mut self,
lesson_id: String,
difficulty: Difficulty,
)
pub fn record_lesson_completion( &mut self, lesson_id: String, difficulty: Difficulty, )
Record completion of a lesson
Sourcepub fn record_command_use(&mut self, command: String)
pub fn record_command_use(&mut self, command: String)
Record use of a command
Sourcepub fn complete_challenge(&mut self, challenge_id: String)
pub fn complete_challenge(&mut self, challenge_id: String)
Mark a challenge as completed
Sourcepub fn check_achievements(&mut self) -> Vec<Achievement>
pub fn check_achievements(&mut self) -> Vec<Achievement>
Check all achievements and return newly unlocked ones
Sourcepub fn completion_percentage(&self, difficulty: Difficulty) -> f32
pub fn completion_percentage(&self, difficulty: Difficulty) -> f32
Calculate completion percentage for a difficulty level
Note: This requires knowing total lessons available per difficulty. For now, returns a placeholder calculation.
Sourcepub fn overall_completion_percentage(&self, total_lessons: usize) -> f32
pub fn overall_completion_percentage(&self, total_lessons: usize) -> f32
Get overall completion percentage across all lessons
Sourcepub fn update_session_time(&mut self)
pub fn update_session_time(&mut self)
Update total time spent (call this periodically or on session end)
Sourcepub fn formatted_time_spent(&self) -> String
pub fn formatted_time_spent(&self) -> String
Get formatted time spent string (e.g., “2h 30m”)
Sourcepub fn progress_summary(&self) -> ProgressSummary
pub fn progress_summary(&self) -> ProgressSummary
Get progress summary
Sourcepub fn nearly_unlocked_achievements(&self) -> Vec<(Achievement, f32)>
pub fn nearly_unlocked_achievements(&self) -> Vec<(Achievement, f32)>
Get achievements that are close to being unlocked (for motivation)