# zhouqifan666/goldengym architecture

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

- Interactive diagram: https://gitdiagram.com/zhouqifan666/goldengym
- Repository: https://github.com/zhouqifan666/goldengym

## Overview

GoldenGYM is a single-user fitness check-in and goal-tracking web app. Users record workouts, review and edit history, inspect weekly/monthly/total statistics, view activity by calendar date, and manage goals. The Vue pages call API modules through a shared Axios request layer; the Spring REST controllers delegate to service implementations and MyBatis mappers for persistence. The README documents the overall layers and MySQL stack, while sampled source confirms several key calls. Some frontend and persistence details are unsampled, so the graph omits unverified interactions.

Main entry points: [`frontend/src/router/index.js`](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/router/index.js) (Page routing), [`frontend/src/api/exercise.js`](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/exercise.js) (Exercise API client), [`frontend/src/stores/exercise.js`](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/stores/exercise.js) (User context), [`frontend/src/views/Home.vue`](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/Home.vue) (Home dashboard)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_frontend["Web experience"]
  node_router["Page routing<br/>[index.js]"]
  node_home["Home dashboard<br/>[Home.vue]"]
  node_quickcheck["Quick check-in<br/>[QuickCheck.vue]"]
  node_history["Workout history"]
  node_calendar["Activity calendar<br/>[Calendar.vue]"]
  node_goalsview["Goal management<br/>[MyGoals.vue]"]
  node_exercise_store["User context<br/>[exercise.js]"]
  node_exercise_api["Exercise API client<br/>[exercise.js]"]
  node_goal_api["Goal API client<br/>[goal.js]"]
  node_request["HTTP request layer<br/>[request.js]"]
end

subgraph group_backend_api["REST and services"]
  node_backend["Spring REST API"]
  node_exercise_controller["Exercise endpoints"]
  node_goal_controller["Goal endpoints"]
  node_exercise_service["Exercise service"]
  node_goal_service["Goal service<br/>[GoalService.java]"]
  node_exercise_impl["Exercise logic"]
  node_goal_impl["Goal logic"]
end

subgraph group_persistence["Domain and persistence"]
  node_exercise_data["Workout records"]
  node_goal_data["Exercise goals<br/>[ExerciseGoal.java]"]
  node_exercise_mapper["Workout mapper"]
  node_goal_mapper["Goal mapper"]
  node_mysql[("MySQL database")]
end

node_user(("Personal user"))

node_user -->|"navigates"| node_router
node_router -->|"routes to"| node_home
node_router -->|"routes to"| node_quickcheck
node_router -->|"routes to"| node_history
node_router -->|"routes to"| node_calendar
node_router -->|"routes to"| node_goalsview
node_home -->|"requests workouts"| node_exercise_api
node_home -->|"requests goals"| node_goal_api
node_quickcheck -->|"submits workout"| node_exercise_api
node_history -->|"loads and edits"| node_exercise_api
node_calendar -->|"loads date data"| node_exercise_api
node_goalsview -->|"manages goals"| node_goal_api
node_home -->|"reads user context"| node_exercise_store
node_quickcheck -->|"reads user context"| node_exercise_store
node_history -->|"reads user context"| node_exercise_store
node_calendar -->|"reads user context"| node_exercise_store
node_goalsview -->|"reads user context"| node_exercise_store
node_exercise_api -->|"sends requests"| node_request
node_goal_api -->|"sends requests"| node_request
node_request -->|"calls API"| node_backend
node_backend -->|"exposes"| node_exercise_controller
node_exercise_controller -->|"delegates"| node_exercise_service
node_goal_controller -->|"delegates"| node_goal_service
node_exercise_service -->|"implemented by"| node_exercise_impl
node_goal_service -->|"implemented by"| node_goal_impl
node_exercise_impl -->|"queries and writes"| node_exercise_mapper
node_goal_impl -->|"queries and writes"| node_goal_mapper
node_exercise_mapper -->|"persists records"| node_mysql
node_goal_mapper -->|"persists goals"| node_mysql
node_exercise_impl -->|"maps records"| node_exercise_data
node_goal_impl -->|"maps goals"| node_goal_data

click node_router "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/router/index.js"
click node_home "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/Home.vue"
click node_quickcheck "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/QuickCheck.vue"
click node_history "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/ExerciseHistory.vue"
click node_calendar "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/Calendar.vue"
click node_goalsview "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/MyGoals.vue"
click node_exercise_store "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/stores/exercise.js"
click node_exercise_api "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/exercise.js"
click node_goal_api "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/goal.js"
click node_request "https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/request.js"
click node_backend "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/ExerciseController.java"
click node_exercise_controller "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/ExerciseController.java"
click node_goal_controller "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/GoalController.java"
click node_exercise_service "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/ExerciseService.java"
click node_goal_service "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/GoalService.java"
click node_exercise_impl "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java"
click node_goal_impl "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java"
click node_exercise_data "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/entity/ExerciseRecord.java"
click node_goal_data "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/entity/ExerciseGoal.java"
click node_exercise_mapper "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/mapper/ExerciseRecordMapper.java"
click node_goal_mapper "https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/mapper/ExerciseGoalMapper.java"

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_router,node_home,node_quickcheck,node_history,node_calendar,node_goalsview,node_exercise_store,node_exercise_api,node_goal_api,node_request,node_user toneBlue
class node_backend,node_exercise_controller,node_goal_controller,node_exercise_service,node_goal_service,node_exercise_impl,node_goal_impl toneAmber
class node_exercise_data,node_goal_data,node_exercise_mapper,node_goal_mapper,node_mysql toneMint
```

## Components

### Web experience

- [Page routing](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/router/index.js): `frontend/src/router/index.js`
- [Home dashboard](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/Home.vue): `frontend/src/views/Home.vue`
- [Quick check-in](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/QuickCheck.vue): `frontend/src/views/QuickCheck.vue`
- [Workout history](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/ExerciseHistory.vue): `frontend/src/views/ExerciseHistory.vue`
- [Activity calendar](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/Calendar.vue): `frontend/src/views/Calendar.vue`
- [Goal management](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/views/MyGoals.vue): `frontend/src/views/MyGoals.vue`
- [User context](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/stores/exercise.js): `frontend/src/stores/exercise.js`
- [Exercise API client](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/exercise.js): `frontend/src/api/exercise.js`
- [Goal API client](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/goal.js): `frontend/src/api/goal.js`
- [HTTP request layer](https://github.com/zhouqifan666/goldengym/blob/main/frontend/src/api/request.js): `frontend/src/api/request.js`

### REST and services

- [Spring REST API](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/ExerciseController.java): `backend/src/main/java/com/goldengym/controller/ExerciseController.java`
- [Exercise endpoints](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/ExerciseController.java): `backend/src/main/java/com/goldengym/controller/ExerciseController.java`
- [Goal endpoints](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/controller/GoalController.java): `backend/src/main/java/com/goldengym/controller/GoalController.java`
- [Exercise service](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/ExerciseService.java): `backend/src/main/java/com/goldengym/service/ExerciseService.java`
- [Goal service](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/GoalService.java): `backend/src/main/java/com/goldengym/service/GoalService.java`
- [Exercise logic](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java): `backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java`
- [Goal logic](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java): `backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java`

### Domain and persistence

- [Workout records](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/entity/ExerciseRecord.java): `backend/src/main/java/com/goldengym/entity/ExerciseRecord.java`
- [Exercise goals](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/entity/ExerciseGoal.java): `backend/src/main/java/com/goldengym/entity/ExerciseGoal.java`
- [Workout mapper](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/mapper/ExerciseRecordMapper.java): `backend/src/main/java/com/goldengym/mapper/ExerciseRecordMapper.java`
- [Goal mapper](https://github.com/zhouqifan666/goldengym/blob/main/backend/src/main/java/com/goldengym/mapper/ExerciseGoalMapper.java): `backend/src/main/java/com/goldengym/mapper/ExerciseGoalMapper.java`
- **MySQL database**

### Other components

- **Personal user**

## Connections

- Personal user → Page routing: navigates
- Page routing → Home dashboard: routes to (evidence: `frontend/src/router/index.js`)
- Page routing → Quick check-in: routes to (evidence: `frontend/src/router/index.js`)
- Page routing → Workout history: routes to (evidence: `frontend/src/router/index.js`)
- Page routing → Activity calendar: routes to (evidence: `frontend/src/router/index.js`)
- Page routing → Goal management: routes to (evidence: `frontend/src/router/index.js`)
- Home dashboard → Exercise API client: requests workouts (evidence: `frontend/src/views/Home.vue`)
- Home dashboard → Goal API client: requests goals (evidence: `frontend/src/views/Home.vue`)
- Quick check-in → Exercise API client: submits workout (evidence: `frontend/src/views/QuickCheck.vue`)
- Workout history → Exercise API client: loads and edits (evidence: `frontend/src/views/ExerciseHistory.vue`)
- Activity calendar → Exercise API client: loads date data (evidence: `frontend/src/views/Calendar.vue`)
- Goal management → Goal API client: manages goals (evidence: `frontend/src/views/MyGoals.vue`)
- Home dashboard → User context: reads user context (evidence: `frontend/src/views/Home.vue`)
- Quick check-in → User context: reads user context (evidence: `frontend/src/views/QuickCheck.vue`)
- Workout history → User context: reads user context (evidence: `frontend/src/views/ExerciseHistory.vue`)
- Activity calendar → User context: reads user context (evidence: `frontend/src/views/Calendar.vue`)
- Goal management → User context: reads user context (evidence: `frontend/src/views/MyGoals.vue`)
- Exercise API client → HTTP request layer: sends requests (evidence: `frontend/src/api/exercise.js`)
- Goal API client → HTTP request layer: sends requests (evidence: `frontend/src/api/goal.js`)
- HTTP request layer → Spring REST API: calls API
- Spring REST API → Exercise endpoints: exposes (evidence: `backend/src/main/java/com/goldengym/controller/ExerciseController.java`)
- Exercise endpoints → Exercise service: delegates (evidence: `backend/src/main/java/com/goldengym/controller/ExerciseController.java`)
- Goal endpoints → Goal service: delegates (evidence: `backend/src/main/java/com/goldengym/controller/GoalController.java`)
- Exercise service → Exercise logic: implemented by (evidence: `backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java`)
- Goal service → Goal logic: implemented by (evidence: `backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java`)
- Exercise logic → Workout mapper: queries and writes (evidence: `backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java`)
- Goal logic → Goal mapper: queries and writes (evidence: `backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java`)
- Workout mapper → MySQL database: persists records
- Goal mapper → MySQL database: persists goals
- Exercise logic → Workout records: maps records (evidence: `backend/src/main/java/com/goldengym/service/impl/ExerciseServiceImpl.java`)
- Goal logic → Exercise goals: maps goals (evidence: `backend/src/main/java/com/goldengym/service/impl/GoalServiceImpl.java`)
