Diese Fitness-Tracker-App ist ein Beispielprojekt, das die Prinzipien von Domain-Driven Design (DDD) und eine saubere modulare Architektur implementiert. Die App ermöglicht Benutzern, ihre Trainingsaktivitäten zu verwalten, Trainingspläne zu erstellen und sich sozial mit anderen Benutzern zu vernetzen. Das Projekt ist in Rust geschrieben und verwendet mehrere Bounded Contexts, um die Domäne klar zu trennen und zu organisieren.
Das Projekt ist in verschiedene Bounded Contexts unterteilt, um die Verantwortlichkeiten klar zu trennen und die Wartbarkeit zu verbessern. Jeder Kontext hat seine eigenen Entitäten, Use Cases und Domänenereignisse.
-
User Management Context
- Entitäten: User, Follow
- Use Cases:
- Registrierung und Authentifizierung
- Profilverwaltung
- Rollenverwaltung
- Follow-Beziehungen
-
Exercise Management Context
- Entitäten: Exercise
- Use Cases:
- Erstellung einer Übung
- Bearbeitung einer Übung
-
Training Plan Context
- Entitäten: TrainingPlan, PlanExercise
- Use Cases:
- Erstellung eines Trainingsplans
- Zuordnung von Übungen zu Trainingsplänen
- Beschränkung der Anzahl von Trainingsplänen
-
Training Session Context
- Entitäten: TrainingSession
- Use Cases:
- Aufzeichnung einer Trainingseinheit
- Anzeigen des Trainingsverlaufs
-
Messaging and Social Context
- Entitäten: Message
- Use Cases:
- Nachricht senden
- Nachricht empfangen
-
Billing Context
- Entitäten: Subscription, Payment
- Use Cases:
- Abonnement erstellen
- Zahlung verarbeiten
- Abonnement kündigen
- Abonnement erneuern
fitness-tracker-app/
├── user_management/
│ ├── entities/
│ ├── use_cases/
│ └── events/
├── exercise_management/
│ ├── entities/
│ ├── use_cases/
│ └── events/
├── training_plan/
│ ├── entities/
│ ├── use_cases/
│ └── events/
├── training_session/
│ ├── entities/
│ ├── use_cases/
│ └── events/
├── messaging_social/
│ ├── entities/
│ ├── use_cases/
│ └── events/
├── billing/
│ ├── entities/
│ ├── use_cases/
│ └── events/
└── README.md
- Rust
- Cargo (Rust package manager)
- Rust installieren: Rust installieren
- Repository klonen:
git clone https://github.com/username/fitness-tracker-app.git cd fitness-tracker-app
Um das Projekt zu kompilieren und auszuführen, verwenden Sie den folgenden Befehl:
cargo run
User
- user_id (PK)
- username
- email
- password
- account_type (Enum: Free, Monthly, Lifetime)
- lifetime_flag (Boolean)
- join_date
Exercise
- exercise_id (PK)
- user_id (FK, User)
- name
- description
- category
- creation_date
TrainingPlan
- plan_id (PK)
- user_id (FK, User)
- name
- description
- creation_date
PlanExercise
- plan_exercise_id (PK)
- plan_id (FK, TrainingPlan)
- exercise_id (FK, Exercise)
- order (int)
TrainingSession
- session_id (PK)
- user_id (FK, User)
- plan_id (FK, TrainingPlan)
- date
- duration
- notes
Message
- message_id (PK)
- sender_id (FK, User)
- receiver_id (FK, User)
- content
- timestamp
Follow
- follow_id (PK)
- follower_id (FK, User)
- followee_id (FK, User)
Subscription
- subscription_id (PK)
- user_id (FK, User)
- plan_type (Enum: Free, Monthly, Lifetime)
- start_date
- end_date
- status (Enum: Active, Inactive, Canceled)
Payment
- payment_id (PK)
- user_id (FK, User)
- subscription_id (FK, Subscription)
- amount
- payment_date
- payment_status (Enum: Pending, Completed, Failed)
[User] -----< (1:n) >----- [Exercise]
[User] -----< (1:n) >----- [TrainingPlan]
[User] -----< (1:n) >----- [TrainingSession]
[User] -----< (1:n) >----- [Message] -----< (n:1) >----- [User] (sender_id)
[User] -----< (1:n) >----- [Message] -----< (n:1) >----- [User]
(receiver_id)
[User] -----< (1:n) >----- [Follow] -----< (n:1) >----- [User] (follower_id)
[User] -----< (1:n) >----- [Follow] -----< (n:1) >----- [User] (followee_id)
[TrainingPlan] -----< (n:m) >----- [Exercise] -----< (n:m) >-----
-
Domain Modul erstellen:
- Definiere Entitäten für jeden Kontext.
- Implementiere grundlegende CRUD-Operationen.
-
Use Cases implementieren:
- Definiere und implementiere Use Cases für jeden Kontext.
- Teste die Use Cases mit Unit Tests.
-
Domänenereignisse erstellen:
- Definiere und implementiere Domänenereignisse.
- Stelle sicher, dass Ereignisse bei den entsprechenden Aktionen ausgelöst werden.
-
DDD-Prinzipien befolgen:
- Trenne die Domäne klar in verschiedene Bounded Contexts.
- Implementiere Aggregates und Repositories.
-
Integrationstests:
- Schreibe Integrationstests, um die Zusammenarbeit der verschiedenen Kontexte zu testen.
-
Dokumentation:
- Dokumentiere alle Module, Use Cases und Ereignisse.
- Stelle sicher, dass die README auf dem neuesten Stand ist.
Beiträge sind willkommen! Bitte öffnen Sie ein Issue, bevor Sie größere Änderungen vornehmen, und stellen Sie sicher, dass alle Tests bestehen.
Dieses Projekt ist unter der MIT-Lizenz lizenziert. Weitere Informationen finden Sie in der LICENSE-Datei.