# elias8484/training_rework architecture

> Architecture diagram of the GitHub repository elias8484/training_rework, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/elias8484/training_rework
- Repository: https://github.com/elias8484/training_rework

## Overview

This is a mobile strength-training progression app backed by an ASP.NET Core API and PostgreSQL. A user signs in, builds and saves a workout from exercises and sets, then reviews workout history and progression; programs support reusable exercise selections, and image upload/browsing is another documented-in-tree feature. The graph separates mobile screens, API domains, and persistence. Several screen and endpoint implementations were not sampled, so those capabilities are shown without asserting unverified calls.

Main entry points: [`Backend/Data/AppDbContext.cs`](https://github.com/elias8484/training_rework/blob/main/Backend/Data/AppDbContext.cs) (Entity data context), [`Backend/Controllers/ExerciseController.cs`](https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/ExerciseController.cs) (Exercise and program API), [`mobile/app/(tabs)/workout.tsx`](https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/workout.tsx) (Workout builder), [`mobile/app/(tabs)/(home)/history.tsx`](https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/(home)/history.tsx) (History screens)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_mobile["Mobile app"]
  node_authui["Sign-in and sign-up<br/>[sign-in.tsx]"]
  node_session["Session state<br/>[auth.tsx]"]
  node_workoutui["Workout builder<br/>[workout.tsx]"]
  node_exerciseui["Exercise dialogs"]
  node_programui["Program dialogs<br/>[ProgramsModal.tsx]"]
  node_historyui["History screens<br/>[history.tsx]"]
  node_progressui["Workout summaries"]
  node_imagesui["Image browsing<br/>[all-images.tsx]"]
end

subgraph group_api["Backend API"]
  node_authapi["Authentication endpoints<br/>[AuthController.cs]"]
  node_exerciseapi["Exercise and program API"]
  node_workoutapi["Workout history API"]
  node_uploadapi["Image upload API"]
  node_hosting["API host and JWT<br/>[Program.cs]"]
end

subgraph group_data["Persistence"]
  node_dbcontext["Entity data context<br/>[AppDbContext.cs]"]
  node_users["User records<br/>[User.cs]"]
  node_exercises["Exercise records<br/>[Exercise.cs]"]
  node_workouts["Workout records<br/>[Workout.cs]"]
  node_entries["Exercise entries and sets<br/>[WorkoutEntry.cs]"]
  node_programs["Program records<br/>[Program.cs]"]
  node_images["Saved image records<br/>[SaveImage.cs]"]
end

node_athlete(("Athlete"))
node_postgres[("PostgreSQL")]

node_athlete -->|"signs in"| node_authui
node_authui -.->|"authenticates"| node_authapi
node_authapi -->|"queries users"| node_dbcontext
node_session -->|"stores session"| node_authui
node_athlete -->|"records training"| node_workoutui
node_workoutui -->|"opens selector"| node_exerciseui
node_workoutui -->|"opens programs"| node_programui
node_workoutui -->|"fetches and saves"| node_exerciseapi
node_exerciseapi -->|"reads and writes"| node_dbcontext
node_workoutui -->|"marks saved"| node_session
node_athlete -->|"reviews training"| node_historyui
node_historyui -.->|"requests history"| node_workoutapi
node_workoutapi -->|"reads workouts"| node_dbcontext
node_historyui -.->|"shows summaries"| node_progressui
node_athlete -.->|"browses images"| node_imagesui
node_imagesui -.->|"uses image API"| node_uploadapi
node_uploadapi -->|"reads and writes"| node_dbcontext
node_hosting -->|"configures context"| node_dbcontext
node_dbcontext -->|"persists records"| node_postgres
node_dbcontext -->|"maps entities"| node_users
node_dbcontext -->|"maps entities"| node_exercises
node_dbcontext -->|"maps entities"| node_workouts
node_dbcontext -->|"maps entities"| node_entries
node_dbcontext -->|"maps entities"| node_programs
node_dbcontext -->|"maps entities"| node_images
node_exerciseapi -->|"creates records"| node_exercises
node_exerciseapi -->|"saves workouts"| node_workouts
node_exerciseapi -->|"saves sets"| node_entries
node_exerciseapi -->|"manages programs"| node_programs
node_workoutapi -->|"returns history"| node_workouts
node_uploadapi -->|"stores image data"| node_images

click node_authui "https://github.com/elias8484/training_rework/blob/main/mobile/app/sign-in.tsx"
click node_session "https://github.com/elias8484/training_rework/blob/main/mobile/context/auth.tsx"
click node_workoutui "https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/workout.tsx"
click node_exerciseui "https://github.com/elias8484/training_rework/blob/main/mobile/components/modals/ChooseExerciseModal.tsx"
click node_programui "https://github.com/elias8484/training_rework/blob/main/mobile/components/modals/ProgramsModal.tsx"
click node_historyui "https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/(home)/history.tsx"
click node_progressui "https://github.com/elias8484/training_rework/blob/main/mobile/components/WorkoutSummaryCard.tsx"
click node_imagesui "https://github.com/elias8484/training_rework/blob/main/mobile/app/all-images.tsx"
click node_authapi "https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/AuthController.cs"
click node_exerciseapi "https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/ExerciseController.cs"
click node_workoutapi "https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/WorkoutsController.cs"
click node_uploadapi "https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/UploadsController.cs"
click node_hosting "https://github.com/elias8484/training_rework/blob/main/Backend/Program.cs"
click node_dbcontext "https://github.com/elias8484/training_rework/blob/main/Backend/Data/AppDbContext.cs"
click node_users "https://github.com/elias8484/training_rework/blob/main/Backend/Models/User.cs"
click node_exercises "https://github.com/elias8484/training_rework/blob/main/Backend/Models/Exercise.cs"
click node_workouts "https://github.com/elias8484/training_rework/blob/main/Backend/Models/Workout.cs"
click node_entries "https://github.com/elias8484/training_rework/blob/main/Backend/Models/WorkoutEntry.cs"
click node_programs "https://github.com/elias8484/training_rework/blob/main/Backend/Models/Program.cs"
click node_images "https://github.com/elias8484/training_rework/blob/main/Backend/Models/SaveImage.cs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_authui,node_session,node_workoutui,node_exerciseui,node_programui,node_historyui,node_progressui,node_imagesui toneBlue
class node_authapi,node_exerciseapi,node_workoutapi,node_uploadapi,node_hosting,node_postgres toneAmber
class node_dbcontext,node_users,node_exercises,node_workouts,node_entries,node_programs,node_images toneMint
class node_athlete toneIndigo
```

## Components

### Mobile app

- [Sign-in and sign-up](https://github.com/elias8484/training_rework/blob/main/mobile/app/sign-in.tsx): `mobile/app/sign-in.tsx`
- [Session state](https://github.com/elias8484/training_rework/blob/main/mobile/context/auth.tsx): `mobile/context/auth.tsx`
- [Workout builder](https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/workout.tsx): `mobile/app/(tabs)/workout.tsx`
- [Exercise dialogs](https://github.com/elias8484/training_rework/blob/main/mobile/components/modals/ChooseExerciseModal.tsx): `mobile/components/modals/ChooseExerciseModal.tsx`
- [Program dialogs](https://github.com/elias8484/training_rework/blob/main/mobile/components/modals/ProgramsModal.tsx): `mobile/components/modals/ProgramsModal.tsx`
- [History screens](https://github.com/elias8484/training_rework/blob/main/mobile/app/(tabs)/(home)/history.tsx): `mobile/app/(tabs)/(home)/history.tsx`
- [Workout summaries](https://github.com/elias8484/training_rework/blob/main/mobile/components/WorkoutSummaryCard.tsx): `mobile/components/WorkoutSummaryCard.tsx`
- [Image browsing](https://github.com/elias8484/training_rework/blob/main/mobile/app/all-images.tsx): `mobile/app/all-images.tsx`

### Backend API

- [Authentication endpoints](https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/AuthController.cs): `Backend/Controllers/AuthController.cs`
- [Exercise and program API](https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/ExerciseController.cs): `Backend/Controllers/ExerciseController.cs`
- [Workout history API](https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/WorkoutsController.cs): `Backend/Controllers/WorkoutsController.cs`
- [Image upload API](https://github.com/elias8484/training_rework/blob/main/Backend/Controllers/UploadsController.cs): `Backend/Controllers/UploadsController.cs`
- [API host and JWT](https://github.com/elias8484/training_rework/blob/main/Backend/Program.cs): `Backend/Program.cs`

### Persistence

- [Entity data context](https://github.com/elias8484/training_rework/blob/main/Backend/Data/AppDbContext.cs): `Backend/Data/AppDbContext.cs`
- [User records](https://github.com/elias8484/training_rework/blob/main/Backend/Models/User.cs): `Backend/Models/User.cs`
- [Exercise records](https://github.com/elias8484/training_rework/blob/main/Backend/Models/Exercise.cs): `Backend/Models/Exercise.cs`
- [Workout records](https://github.com/elias8484/training_rework/blob/main/Backend/Models/Workout.cs): `Backend/Models/Workout.cs`
- [Exercise entries and sets](https://github.com/elias8484/training_rework/blob/main/Backend/Models/WorkoutEntry.cs): `Backend/Models/WorkoutEntry.cs`
- [Program records](https://github.com/elias8484/training_rework/blob/main/Backend/Models/Program.cs): `Backend/Models/Program.cs`
- [Saved image records](https://github.com/elias8484/training_rework/blob/main/Backend/Models/SaveImage.cs): `Backend/Models/SaveImage.cs`

### Other components

- **Athlete**
- **PostgreSQL**

## Connections

- Athlete → Sign-in and sign-up: signs in (evidence: `README.md`)
- Sign-in and sign-up → Authentication endpoints: authenticates
- Authentication endpoints → Entity data context: queries users (evidence: `Backend/Controllers/AuthController.cs`)
- Session state → Sign-in and sign-up: stores session (evidence: `mobile/context/auth.tsx`)
- Athlete → Workout builder: records training (evidence: `mobile/app/(tabs)/workout.tsx`)
- Workout builder → Exercise dialogs: opens selector (evidence: `mobile/app/(tabs)/workout.tsx`)
- Workout builder → Program dialogs: opens programs (evidence: `mobile/app/(tabs)/workout.tsx`)
- Workout builder → Exercise and program API: fetches and saves (evidence: `mobile/app/(tabs)/workout.tsx`)
- Exercise and program API → Entity data context: reads and writes (evidence: `Backend/Controllers/ExerciseController.cs`)
- Workout builder → Session state: marks saved (evidence: `mobile/app/(tabs)/workout.tsx`)
- Athlete → History screens: reviews training
- History screens → Workout history API: requests history
- Workout history API → Entity data context: reads workouts (evidence: `Backend/Controllers/WorkoutsController.cs`)
- History screens → Workout summaries: shows summaries
- Athlete → Image browsing: browses images
- Image browsing → Image upload API: uses image API
- Image upload API → Entity data context: reads and writes (evidence: `Backend/Controllers/UploadsController.cs`)
- API host and JWT → Entity data context: configures context (evidence: `Backend/Program.cs`)
- Entity data context → PostgreSQL: persists records
- Entity data context → User records: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Entity data context → Exercise records: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Entity data context → Workout records: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Entity data context → Exercise entries and sets: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Entity data context → Program records: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Entity data context → Saved image records: maps entities (evidence: `Backend/Data/AppDbContext.cs`)
- Exercise and program API → Exercise records: creates records (evidence: `Backend/Controllers/ExerciseController.cs`)
- Exercise and program API → Workout records: saves workouts (evidence: `Backend/Controllers/ExerciseController.cs`)
- Exercise and program API → Exercise entries and sets: saves sets (evidence: `Backend/Controllers/ExerciseController.cs`)
- Exercise and program API → Program records: manages programs (evidence: `Backend/Controllers/ExerciseController.cs`)
- Workout history API → Workout records: returns history (evidence: `Backend/Controllers/WorkoutsController.cs`)
- Image upload API → Saved image records: stores image data (evidence: `Backend/Controllers/UploadsController.cs`)
