How siddarth2904/befit works
Purpose and topology
BeFit is a fitness-tracking microservice system with a React client. Users authenticate through the gateway, manage activity records, and receive AI-generated recommendations. Each backend is an independent Spring Boot/Maven application; runtime service discovery and centralized configuration support the fleet.
Client entry and user interaction
The Vite/React frontend is the browser entry point. It initializes the app, holds authentication state, renders activity creation/list/detail flows, and calls backend APIs.
• fitness-frontend/src/main.jsx
• fitness-frontend/src/App.jsx
• fitness-frontend/src/services/api.js
• fitness-frontend/src/store/authSlice.js
API gateway and identity boundary
The gateway is the external backend boundary. Spring Security protects routed requests; a Keycloak-oriented filter synchronizes authenticated user information into the system through gateway user-service integration. This separates client-facing authentication from downstream domain services.
• apigateway/apigateway/src/main/java/com/fitness/apigateway/ApigatewayApplication.java
• apigateway/apigateway/src/main/java/com/fitness/apigateway/configs/SecurityConfig.java
• apigateway/apigateway/src/main/java/com/fitness/apigateway/filters/KeycloakUserSyncFilter.java
• apigateway/apigateway/src/main/java/com/fitness/apigateway/services/UserService.java
User domain service
The user service owns application user records, user type, registration DTOs, and persistence access. Gateway sync/registration flows cross into this service rather than allowing other services to own user state.
• userservice/userservice/src/main/java/com/fitness/userservice/controllers/UserController.java
• userservice/userservice/src/main/java/com/fitness/userservice/services/UserService.java
• userservice/userservice/src/main/java/com/fitness/userservice/model/User.java
• userservice/userservice/src/main/java/com/fitness/userservice/repositories/UserRepository.java
Activity ingestion and persistence
The activity service exposes activity operations, validates referenced users through an outbound WebClient boundary, and persists activity entities to MongoDB. It also configures RabbitMQ, indicating activity creation/update is the producer-side event boundary for recommendation processing.
• activityservice/activityservice/src/main/java/com/fitness/activityservice/controllers/ActivityController.java
• activityservice/activityservice/src/main/java/com/fitness/activityservice/services/ActivityService.java
• activityservice/activityservice/src/main/java/com/fitness/activityservice/services/UserValidationService.java
• activityservice/activityservice/src/main/java/com/fitness/activityservice/repositories/ActivityRepository.java
Asynchronous AI recommendations
The AI service consumes activity messages from RabbitMQ, transforms activity data into recommendation-generation work, calls Gemini through a dedicated service boundary, and persists recommendations in MongoDB. Recommendations are exposed through a controller independently of activity writes, decoupling AI latency/failure from activity ingestion.
• aiservice/aiservice/src/main/java/com/fitness/aiservice/services/ActivityMessageListener.java
• aiservice/aiservice/src/main/java/com/fitness/aiservice/services/ActivityAIService.java
• aiservice/aiservice/src/main/java/com/fitness/aiservice/services/GeminiService.java
• aiservice/aiservice/src/main/java/com/fitness/aiservice/repository/RecommendationRepository.java
Platform services and runtime dependencies
Eureka provides service registration/discovery; Config Server centrally serves per-service configuration. Spring Boot is the backend runtime, with MongoDB for activity/recommendation data, RabbitMQ for activity events, Keycloak for identity integration, and Gemini as the external AI provider. Service-specific configuration files define the deployment wiring.
• eureka/eureka/src/main/java/com/server/eureka/EurekaApplication.java
• configserver/configserver/src/main/java/com/fitness/configserver/ConfigserverApplication.java
• configserver/configserver/src/main/resources/config/activity-service.yml
• configserver/configserver/src/main/resources/config/ai-service.yml
Main entry points: ActivityService.java Activity service · ApigatewayApplication.java API gateway · ActivityAIService.java Recommendation generator · UserService.java User service
Components 19
Client
- React client · Authentication state and activity UI.
fitness-frontend/src/App.jsx - API client
fitness-frontend/src/services/api.js
API & Identity
- API gateway · External backend entry point.
apigateway/apigateway/src/main/java/com/fitness/apigateway/ApigatewayApplication.java - Security & user sync · Protects requests and synchronizes Keycloak users.
apigateway/apigateway/src/main/java/com/fitness/apigateway/filters/KeycloakUserSyncFilter.java - Keycloak
Domain Services
- User service · Owns application user records and registration.
userservice/userservice/src/main/java/com/fitness/userservice/services/UserService.java - User repository
userservice/userservice/src/main/java/com/fitness/userservice/repositories/UserRepository.java - Activity service · Handles activity operations.
activityservice/activityservice/src/main/java/com/fitness/activityservice/services/ActivityService.java - User validation · Validates referenced users before activity writes.
activityservice/activityservice/src/main/java/com/fitness/activityservice/services/UserValidationService.java - Activity repository
activityservice/activityservice/src/main/java/com/fitness/activityservice/repositories/ActivityRepository.java - Activity MongoDB
Recommendation Pipeline
- RabbitMQ · Carries activity events to recommendation processing.
- Activity listener · Consumes activity messages.
aiservice/aiservice/src/main/java/com/fitness/aiservice/services/ActivityMessageListener.java - Recommendation generator · Transforms activities into recommendation work.
aiservice/aiservice/src/main/java/com/fitness/aiservice/services/ActivityAIService.java - Gemini
- Recommendation repository
aiservice/aiservice/src/main/java/com/fitness/aiservice/repository/RecommendationRepository.java - Recommendation MongoDB
Platform
- Eureka
eureka/eureka/src/main/java/com/server/eureka/EurekaApplication.java - Config Server · Serves deployment wiring per service.
configserver/configserver/src/main/java/com/fitness/configserver/ConfigserverApplication.java
Connections 24
- React client → API client: uses
- API client → API gateway: API requests
- API gateway → Security & user sync: secured routing
- Security & user sync → Keycloak: authenticates
- Security & user sync → User service: syncs users
- API gateway → Activity service: routes activity APIs
- API gateway → User service: routes user APIs
- User service → User repository: persists users
- Activity service → User validation: validates user
- User validation → User service: checks user
- Activity service → Activity repository: stores activities
- Activity repository → Activity MongoDB: MongoDB
- Activity service → RabbitMQ: publishes activity events
- RabbitMQ → Activity listener: delivers events
- Activity listener → Recommendation generator: activity data
- Recommendation generator → Gemini: generates recommendations
- Recommendation generator → Recommendation repository: persists recommendations
- Recommendation repository → Recommendation MongoDB: MongoDB
- API gateway → Eureka: registers/discovers
- User service → Eureka: registers
- Activity service → Eureka: registers
- Recommendation generator → Eureka: registers
- Activity service → Config Server: loads config
- Recommendation generator → Config Server: loads config