namespace GermanApp.Domain.Entities;
///
/// Represents a user in the DeutschLernen system.
///
public class User
{
public int Id { get; private set; }
public string Username { get; private set; } = string.Empty;
public string Email { get; private set; } = string.Empty;
public string PasswordHash { get; private set; } = string.Empty;
public string CurrentLevel { get; private set; } = "A1";
public int Streak { get; private set; }
public int TotalPoints { get; private set; }
public DateTime CreatedAt { get; private set; }
///
/// Constructor for EF Core deserialization.
///
private User() { }
///
/// Factory method to create a new user.
///
public static User Create(string username, string email, string passwordHash)
{
return new User
{
Username = username,
Email = email.ToLowerInvariant(),
PasswordHash = passwordHash,
CurrentLevel = "A1",
Streak = 0,
TotalPoints = 0,
CreatedAt = DateTime.UtcNow
};
}
///
/// Updates user's gamification stats.
///
public void AddPoints(int points)
{
TotalPoints += points;
}
///
/// Updates user's streak.
///
public void UpdateStreak(int streak)
{
Streak = streak;
}
///
/// Updates user's current level.
///
public void UpdateLevel(string level)
{
CurrentLevel = level;
}
///
/// Changes user's email.
///
public void ChangeEmail(string newEmail)
{
Email = newEmail.ToLowerInvariant();
}
///
/// Changes user's password hash.
///
public void ChangePassword(string newPasswordHash)
{
PasswordHash = newPasswordHash;
}
}