# Lifton Gesamtplan ## Zusammenfassung `Lifton` ist eine Windows-Desktop-Fitness-App mit WPF und C#. Die App hilft Nutzern, Workouts detailliert zu erfassen, Fortschritt durch XP und Level sichtbar zu machen, Coins zu verdienen und Avatare im Store freizuschalten. Die Architektur folgt `MVVM`: `Views` zeigen die Oberfläche, `ViewModels` steuern die Interaktion, `Services` enthalten die Logik, und `Repositories` verbinden die App mit SQL Server über EF Core. ## Muss-Funktionen - Benutzerkonto: - Registrierung und Login mit Benutzername und Passwort. - Passwörter werden mit BCrypt gehasht. - Nutzerprofil mit Anzeigename, Fitnessziel, Wochenziel und ausgewähltem Avatar. - Dashboard: - Übersicht über aktuelles Level, XP, Streak, Coins und letzte Workouts. - Anzeige des ausgerüsteten Avatars. - Schneller Einstieg zu `Neues Workout`, `Verlauf`, `Store` und `Freunde`. - Neues Workout: - Nutzer wählt zuerst den Workout-Typ: `Beine`, `Brust`, `Rücken`, `Schultern`, `Arme`, `Core`, `Cardio`, `Ganzkörper`, `Custom`. - App zeigt passende Übungen, zum Beispiel bei Beine: `Squat`, `Leg Press`, `Leg Extension`, `Leg Curl`, `Calf Raise`, `Lunges`. - Nutzer kann Übungen auswählen und pro Übung mehrere Sets eintragen. - Pro Set werden Gewicht, Wiederholungen und Pausenzeit gespeichert. - Nutzer legt am Anfang eine Standardpause fest, zum Beispiel `2 Minuten`. - Einzelne Sets können eine eigene Pausenzeit haben. - Workout-Verlauf: - Alle vergangenen Workouts anzeigen. - Workouts filtern, bearbeiten und löschen. - Änderungen an Sets oder Übungen berechnen XP und Coins neu. - Gamification: - Workouts geben XP für Level-Fortschritt. - Workouts geben Coins für den Avatar-Store. - XP wird durch Gewicht, Wiederholungen, Sets und Pausen-Konstanz berechnet. - Coins werden getrennt von XP behandelt und beeinflussen das Level nicht. - Avatar-Store: - Eingebaute Avatare mit Varianten. - Avatare können Coins kosten, ein Mindestlevel verlangen oder beides. - Nutzer können Avatare kaufen und einen Avatar ausrüsten. - Ausgerüsteter Avatar erscheint im Profil und Dashboard. - Freunde und Privatsphäre: - Freundschaftsanfragen senden, annehmen und ablehnen. - Freunde-Liste anzeigen. - Freundesprofil anzeigen, abhängig von Privatsphäre-Einstellungen. - Nutzer kann festlegen, ob Freunde Level, Streak, Verlauf und Statistiken sehen dürfen. ## Datenmodell und Klassen - Zentrale Models: - `UserProfile`: Nutzerdaten, Login-Name, Anzeigename, Ziel und Wochenziel. - `ProgressState`: XP, aktuelles Level, Streak, Coin-Guthaben und letztes Workout. - `WorkoutSession`: ein komplettes Workout an einem Tag. - `WorkoutExercise`: eine Übung innerhalb eines Workouts. - `ExerciseSet`: ein einzelnes Set mit Gewicht, Wiederholungen, Pause und XP. - `ExerciseCatalogItem`: Übungskatalog nach Workout-Typ. - `AvatarCatalogItem`: Avatar im Store. - `UserAvatarOwnership`: welche Avatare ein Nutzer besitzt. - `Friendship`, `FriendRequest`, `PrivacySettings`: Social- und Privatsphäre-Funktionen. - Wichtige Services: - `AuthService`: Login, Registrierung, Logout, Passwortprüfung. - `WorkoutService`: Workouts, Übungen und Sets speichern, bearbeiten und löschen. - `ProgressService`: XP, Level, Streak und Coins berechnen. - `AvatarStoreService`: Avatare kaufen und ausrüsten. - `FriendshipService`: Freundschaften und Anfragen verwalten. - `PrivacyService`: Sichtbarkeit von Freundesprofilen prüfen. - `NavigationService`: Wechsel zwischen Views. - SQL-Tabellen: - `UserProfiles` - `ProgressStates` - `WorkoutSessions` - `WorkoutExercises` - `ExerciseSets` - `ExerciseCatalogItems` - `AvatarCatalogItems` - `UserAvatarOwnerships` - `Friendships` - `FriendRequests` - `PrivacySettings` ## XP- und Coin-Regeln - XP pro Kraft-Set: ```text SetXP = 5 + floor((GewichtKg * Wiederholungen) / 20) ``` - Wenn Gewicht `0 kg` ist, gilt Bodyweight: ```text SetXP = 5 + floor(Wiederholungen / 2) ``` - Pausenbonus: ```text +2 XP pro Set, wenn die echte Pause maximal 30 Sekunden von der Standardpause abweicht ``` - Abschlussbonus: ```text +10 XP pro abgeschlossener Übung ``` - Coins: ```text Coins = floor(GesamtWorkoutXP / 10) ``` - Wichtig: - XP erhöht Level und Fortschritt. - Coins werden nur im Avatar-Store ausgegeben. - Avatar-Käufe dürfen XP oder Level nie reduzieren. ## Nice-to-Have Funktionen - Mahlzeiten- und Kalorienrechner: - Lebensmittel suchen. - Mahlzeiten zusammenstellen. - Kalorien berechnen. - Gespeicherte Mahlzeiten oder Rezepte wiederverwenden. - Diese Funktion bleibt getrennt von XP, Coins und Level. - Leaderboard: - Freunde nach XP oder Level sortieren. - Erst sinnvoll, wenn Freundesystem fertig ist. - Achievements: - Badges für Meilensteine wie `100 Workouts` oder `30 Tage Streak`. - Personal Bests: - Beste Leistung pro Übung speichern, zum Beispiel höchstes Gewicht bei Leg Press. - Workout Posts: - Nutzer können ein abgeschlossenes Workout mit Freunden teilen. - Weitere Cosmetics: - Profilrahmen, Themes oder andere Store-Items. ## Testplan - Registrierung erstellt Nutzerprofil, ProgressState und PrivacySettings korrekt. - Login funktioniert nur mit korrektem Passwort. - Neues Workout kann mit mehreren Übungen und mehreren Sets gespeichert werden. - Standardpause wird automatisch auf neue Sets angewendet. - Gewicht, Wiederholungen und Pausenzeit berechnen XP korrekt. - Coins werden aus Gesamt-XP korrekt berechnet. - Bearbeiten oder Löschen eines Sets berechnet XP, Coins und Fortschritt neu. - Avatar kann nur gekauft werden, wenn Level und Coins ausreichen. - Nutzer kann immer nur einen Avatar gleichzeitig ausrüsten. - Freunde sehen nur Daten, die durch PrivacySettings erlaubt sind. - Datenbankabfragen filtern immer nach eingeloggtem Nutzer. ## Annahmen - Zielplattform ist Windows mit WPF. - Programmiersprache ist C#. - Datenbank ist SQL Server. - EF Core wird für den Datenbankzugriff genutzt. - Architektur ist MVVM. - Die App ist für interne oder kontrollierte Nutzer gedacht. - Der erste Fokus liegt auf Workout, Fortschritt, Avatar-Store und Social-Funktionen. - Kalorienrechner, Leaderboard, Achievements und Posts kommen später.