From faf7bffe2202ca7cbb2288f7b85ab6d794d94002 Mon Sep 17 00:00:00 2001 From: oguzhekim Date: Wed, 11 Dec 2024 21:50:51 +0300 Subject: [PATCH] Update TrainingProgramService based on new models --- .../demo/services/TrainingProgramService.java | 88 +++++++++++++------ 1 file changed, 60 insertions(+), 28 deletions(-) diff --git a/backend/demo-group7/src/main/java/com/group7/demo/services/TrainingProgramService.java b/backend/demo-group7/src/main/java/com/group7/demo/services/TrainingProgramService.java index ee3c67a..3da485c 100644 --- a/backend/demo-group7/src/main/java/com/group7/demo/services/TrainingProgramService.java +++ b/backend/demo-group7/src/main/java/com/group7/demo/services/TrainingProgramService.java @@ -51,30 +51,62 @@ public TrainingProgramResponse createTrainingProgram(TrainingProgramRequest trai .title(trainingProgramRequest.getTitle()) .description(trainingProgramRequest.getDescription()) .trainer(user) - .createdAt(LocalDateTime.now()) + .type(trainingProgramRequest.getType()) + .level(trainingProgramRequest.getLevel()) + .interval(trainingProgramRequest.getInterval()) + .rating(0.0) + .ratingCount(0) .build(); - List exercises = trainingProgramRequest.getExercises().stream() - .map(exerciseRequest -> { - // Fetch the exercise from the database (assuming exerciseId is unique) - Exercise exercise = exerciseRepository.findById(exerciseRequest.getId()) - .orElseThrow(() -> new IllegalArgumentException("Exercise not found with id: " + exerciseRequest.getId())); - - // Create the TrainingProgramExercise entity - TrainingProgramExercise trainingProgramExercise = new TrainingProgramExercise(); - trainingProgramExercise.setTrainingProgram(trainingProgram); // Set the training program reference - trainingProgramExercise.setExercise(exercise); // Set the exercise reference - trainingProgramExercise.setRepetitions(exerciseRequest.getRepetitions()); // Set repetitions - trainingProgramExercise.setSets(exerciseRequest.getSets()); // Set sets - - return trainingProgramExercise; + // Create the weeks and workouts + List weeks = trainingProgramRequest.getWeeks().stream() + .map(weekRequest -> { + // Create the week entity + Week week = Week.builder() + .weekNumber(trainingProgramRequest.getWeeks().indexOf(weekRequest) + 1) + .trainingProgram(trainingProgram) + .build(); + + // Create workouts for the week + List workouts = weekRequest.getWorkouts().stream() + .map(workoutRequest -> { + // Create the workout entity + Workout workout = Workout.builder() + .name(workoutRequest.getName()) + .workoutNumber(weekRequest.getWorkouts().indexOf(workoutRequest) + 1) + .week(week) + .build(); + + // Create exercises for the workout + List workoutExercises = workoutRequest.getExercises().stream() + .map(exerciseRequest -> { + Exercise exercise = exerciseRepository.findById(exerciseRequest.getExerciseId()) + .orElseThrow(() -> new IllegalArgumentException("Exercise not found with id: " + exerciseRequest.getExerciseId())); + + // Create the workout exercise entity + WorkoutExercise workoutExercise = WorkoutExercise.builder() + .workout(workout) + .exercise(exercise) + .exerciseNumber(workoutRequest.getExercises().indexOf(exerciseRequest) + 1) + .repetitions(exerciseRequest.getRepetitions()) + .sets(exerciseRequest.getSets()) + .build(); + return workoutExercise; + }) + .collect(Collectors.toList()); + + workout.setExercises(workoutExercises); // Set exercises for the workout + return workout; + }) + .collect(Collectors.toList()); + + week.setWorkouts(workouts); // Set workouts for the week + return week; }) .collect(Collectors.toList()); - // Set the exercises for the training program - trainingProgram.setExercises(exercises); + trainingProgram.setWeeks(weeks); // Set weeks for the training program - // Save the training program and return a response TrainingProgram savedProgram = trainingProgramRepository.save(trainingProgram); return mapper.mapToTrainingProgramResponse(savedProgram); } @@ -125,7 +157,7 @@ public void deleteTrainingProgram(Long id, HttpServletRequest request) throws Ex // Delete the training program trainingProgramRepository.delete(trainingProgram); } - + // TODO: This function will change @Transactional public UserTrainingProgramResponse joinTrainingProgram(Long trainingProgramId , HttpServletRequest request) { User user = authenticationService.getAuthenticatedUserInternal(request); @@ -139,7 +171,7 @@ public UserTrainingProgramResponse joinTrainingProgram(Long trainingProgramId , if (hasOngoingProgram) { throw new IllegalStateException("User is already actively participating in this training program."); } - + /* // Initialize the progress JSON object ObjectMapper objectMapper = new ObjectMapper(); Map exerciseProgress = trainingProgram.getExercises().stream() @@ -154,14 +186,14 @@ public UserTrainingProgramResponse joinTrainingProgram(Long trainingProgramId , } catch (JsonProcessingException e) { throw new IllegalStateException("Failed to initialize exercise progress JSON", e); } - + */ // Create a new UserTrainingProgram entity UserTrainingProgram userTrainingProgram = UserTrainingProgram.builder() .user(user) .trainingProgram(trainingProgram) .joinedAt(LocalDateTime.now()) .status(UserTrainingProgramStatus.ONGOING) - .exerciseProgress(progressJson) + //.exerciseProgress(progressJson) .completedAt(null) .build(); @@ -180,7 +212,7 @@ public Set getRegisteredUsernames(Long trainingProgramId) { .map(userTrainingProgram -> userTrainingProgram.getUser().getUsername()) .collect(Collectors.toSet()); } - + // TODO: This function will change // Return the list of joined training programs for the authenticated user @Transactional public List getJoinedTrainingPrograms(String username) throws Exception { @@ -195,7 +227,7 @@ public List getJoinedTrainingPrograms(String userna .map(mapper::mapToUserTrainingProgramResponse) // Map to UserTrainingProgramResponse instead of TrainingProgramResponse .collect(Collectors.toList()); } - + // TODO: This function will change private UserTrainingProgram getOngoingUserTrainingProgram(User user, Long trainingProgramId) { List ongoingPrograms = userTrainingProgramRepository.findByUserAndTrainingProgramIdAndStatus(user, trainingProgramId, UserTrainingProgramStatus.ONGOING); @@ -207,7 +239,7 @@ private UserTrainingProgram getOngoingUserTrainingProgram(User user, Long traini return ongoingPrograms.get(0); } - + // TODO: This function will change @Transactional public UserTrainingProgramResponse markExerciseAsCompleted(Long trainingProgramId, Long exerciseId, HttpServletRequest request) { User user = authenticationService.getAuthenticatedUserInternal(request); @@ -233,7 +265,7 @@ public UserTrainingProgramResponse markExerciseAsCompleted(Long trainingProgramI } - + // TODO: This function will change @Transactional public UserTrainingProgramResponse unmarkExerciseAsCompleted(Long trainingProgramId, Long exerciseId, HttpServletRequest request) { User user = authenticationService.getAuthenticatedUserInternal(request); @@ -257,7 +289,7 @@ public UserTrainingProgramResponse unmarkExerciseAsCompleted(Long trainingProgra return mapper.mapToUserTrainingProgramResponse(userTrainingProgramRepository.save(userTrainingProgram)); } - + // TODO: This function will change @Transactional public UserTrainingProgramResponse markTrainingProgramAsCompleted(Long trainingProgramId, HttpServletRequest request) { User user = authenticationService.getAuthenticatedUserInternal(request); @@ -270,7 +302,7 @@ public UserTrainingProgramResponse markTrainingProgramAsCompleted(Long trainingP return mapper.mapToUserTrainingProgramResponse(userTrainingProgramRepository.save(userTrainingProgram)); } - + // TODO: This function will change @Transactional public UserTrainingProgramResponse leaveTrainingProgram(Long trainingProgramId, HttpServletRequest request) { User user = authenticationService.getAuthenticatedUserInternal(request);