# gaouravpatil/fitness-microservice architecture

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

- Interactive diagram: https://gitdiagram.com/gaouravpatil/fitness-microservice
- Repository: https://github.com/gaouravpatil/fitness-microservice

## Overview

Fitness Microservice exposes registration, authentication and profile APIs, then accepts authenticated activity tracking and provides paginated activity reads. Activity submission validates the user, persists the activity, and publishes it for recommendation generation; unpublished events are retried. The README also documents recommendation reads and owner-or-admin access. The sampled source shows the user and activity service internals; AI, Kafka and database links are based on README documentation, since their implementation files are absent from the supplied tree.

Main entry points: [`userservice/src/main/java/com/fitness/userservice/service/AuthService.java`](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/service/AuthService.java) (Authentication), [`activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java`](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java) (Activity Workflow), [`userservice/src/main/java/com/fitness/userservice/controller/UserController.java`](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/controller/UserController.java) (User API), [`activityservice/src/main/java/com/fitness/activityservice/service/ActivityRepublisher.java`](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityRepublisher.java) (Scheduled Republisher)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_identity["Identity and Access"]
  node_user_api["User API"]
  node_user_service["User Profiles<br/>[UserService.java]"]
  node_auth_service["Authentication<br/>[AuthService.java]"]
  node_jwt["JWT Issuance<br/>[JwtService.java]"]
  node_refresh["Refresh Tokens"]
  node_login_attempts["Login Throttling"]
end

subgraph group_activity["Activity Tracking"]
  node_activity_api["Activity API"]
  node_activity_service["Activity Workflow"]
  node_user_validation["User Validation"]
  node_activity_repo["Activity Repository"]
end

subgraph group_events["Event and Recommendations"]
  node_publisher["Activity Publisher"]
  node_republisher["Scheduled Republisher"]
  node_kafka["Activity Kafka Topic"]
  node_ai_service["Recommendation Service"]
end

subgraph group_state["Persistent State"]
  node_user_db[("PostgreSQL")]
  node_activity_db[("Activity MongoDB")]
  node_recommendation_db[("Recommendation MongoDB")]
end

node_client(("Client"))

node_client -->|"register or sign in"| node_user_api
node_user_api -->|"routes profile"| node_user_service
node_user_api -->|"routes authentication"| node_auth_service
node_user_service -->|"reads and writes"| node_user_db
node_auth_service -->|"looks up users"| node_user_db
node_auth_service -->|"issues access token"| node_jwt
node_auth_service -->|"issues or rotates"| node_refresh
node_auth_service -->|"checks attempts"| node_login_attempts
node_refresh -->|"stores token hashes"| node_user_db
node_client -->|"tracks or reads"| node_activity_api
node_activity_api -->|"routes activities"| node_activity_service
node_activity_service -->|"validates owner"| node_user_validation
node_user_validation -->|"checks user"| node_user_api
node_activity_service -->|"reads and saves"| node_activity_repo
node_activity_repo -->|"persists activities"| node_activity_db
node_activity_service -->|"publishes saved activity"| node_publisher
node_publisher -->|"publishes event"| node_kafka
node_republisher -->|"retries unpublished events"| node_activity_db
node_republisher -->|"retries publication"| node_kafka
node_kafka -->|"delivers activity"| node_ai_service
node_ai_service -->|"stores recommendations"| node_recommendation_db
node_client -->|"reads recommendations"| node_ai_service

click node_user_api "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/controller/UserController.java"
click node_user_service "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/service/UserService.java"
click node_auth_service "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/service/AuthService.java"
click node_jwt "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/JwtService.java"
click node_refresh "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/RefreshTokenService.java"
click node_login_attempts "https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/LoginAttemptService.java"
click node_activity_api "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java"
click node_activity_service "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java"
click node_user_validation "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/UserValidationService.java"
click node_activity_repo "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/repository/ActivityRepository.java"
click node_publisher "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityPublisher.java"
click node_republisher "https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityRepublisher.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_user_api,node_user_service,node_auth_service,node_jwt,node_refresh,node_login_attempts,node_client toneBlue
class node_activity_api,node_activity_service,node_user_validation,node_activity_repo toneAmber
class node_publisher,node_republisher,node_kafka,node_ai_service toneMint
class node_user_db,node_activity_db,node_recommendation_db toneRose
```

## Components

### Identity and Access

- [User API](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/controller/UserController.java): `userservice/src/main/java/com/fitness/userservice/controller/UserController.java`
- [User Profiles](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/service/UserService.java): `userservice/src/main/java/com/fitness/userservice/service/UserService.java`
- [Authentication](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/service/AuthService.java): `userservice/src/main/java/com/fitness/userservice/service/AuthService.java`
- [JWT Issuance](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/JwtService.java): `userservice/src/main/java/com/fitness/userservice/security/JwtService.java`
- [Refresh Tokens](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/RefreshTokenService.java): `userservice/src/main/java/com/fitness/userservice/security/RefreshTokenService.java`
- [Login Throttling](https://github.com/gaouravpatil/fitness-microservice/blob/main/userservice/src/main/java/com/fitness/userservice/security/LoginAttemptService.java): `userservice/src/main/java/com/fitness/userservice/security/LoginAttemptService.java`

### Activity Tracking

- [Activity API](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java): `activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java`
- [Activity Workflow](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java): `activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java`
- [User Validation](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/UserValidationService.java): `activityservice/src/main/java/com/fitness/activityservice/service/UserValidationService.java`
- [Activity Repository](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/repository/ActivityRepository.java): `activityservice/src/main/java/com/fitness/activityservice/repository/ActivityRepository.java`

### Event and Recommendations

- [Activity Publisher](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityPublisher.java): `activityservice/src/main/java/com/fitness/activityservice/service/ActivityPublisher.java`
- [Scheduled Republisher](https://github.com/gaouravpatil/fitness-microservice/blob/main/activityservice/src/main/java/com/fitness/activityservice/service/ActivityRepublisher.java): `activityservice/src/main/java/com/fitness/activityservice/service/ActivityRepublisher.java`
- **Activity Kafka Topic**
- **Recommendation Service**

### Persistent State

- **PostgreSQL**
- **Activity MongoDB**
- **Recommendation MongoDB**

### Other components

- **Client**

## Connections

- Client → User API: register or sign in (evidence: `README.md`)
- User API → User Profiles: routes profile (evidence: `userservice/src/main/java/com/fitness/userservice/controller/UserController.java`)
- User API → Authentication: routes authentication (evidence: `userservice/src/main/java/com/fitness/userservice/controller/UserController.java`)
- User Profiles → PostgreSQL: reads and writes (evidence: `userservice/src/main/java/com/fitness/userservice/service/UserService.java`)
- Authentication → PostgreSQL: looks up users (evidence: `userservice/src/main/java/com/fitness/userservice/service/AuthService.java`)
- Authentication → JWT Issuance: issues access token (evidence: `userservice/src/main/java/com/fitness/userservice/service/AuthService.java`)
- Authentication → Refresh Tokens: issues or rotates (evidence: `userservice/src/main/java/com/fitness/userservice/service/AuthService.java`)
- Authentication → Login Throttling: checks attempts (evidence: `userservice/src/main/java/com/fitness/userservice/service/AuthService.java`)
- Refresh Tokens → PostgreSQL: stores token hashes (evidence: `userservice/src/main/java/com/fitness/userservice/security/RefreshTokenService.java`)
- Client → Activity API: tracks or reads (evidence: `README.md`)
- Activity API → Activity Workflow: routes activities (evidence: `activityservice/src/main/java/com/fitness/activityservice/controller/ActivityController.java`)
- Activity Workflow → User Validation: validates owner (evidence: `activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java`)
- User Validation → User API: checks user (evidence: `README.md`)
- Activity Workflow → Activity Repository: reads and saves (evidence: `activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java`)
- Activity Repository → Activity MongoDB: persists activities (evidence: `README.md`)
- Activity Workflow → Activity Publisher: publishes saved activity (evidence: `activityservice/src/main/java/com/fitness/activityservice/service/ActivityService.java`)
- Activity Publisher → Activity Kafka Topic: publishes event (evidence: `README.md`)
- Scheduled Republisher → Activity MongoDB: retries unpublished events (evidence: `README.md`)
- Scheduled Republisher → Activity Kafka Topic: retries publication (evidence: `README.md`)
- Activity Kafka Topic → Recommendation Service: delivers activity (evidence: `README.md`)
- Recommendation Service → Recommendation MongoDB: stores recommendations (evidence: `README.md`)
- Client → Recommendation Service: reads recommendations (evidence: `README.md`)
