Skip to content

Commit

Permalink
relate training program and user
Browse files Browse the repository at this point in the history
  • Loading branch information
m1u1s1 committed Oct 21, 2024
1 parent 654e405 commit 8023b34
Show file tree
Hide file tree
Showing 5 changed files with 39 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.ArrayList;
import java.util.List;

@Data
@Builder
@NoArgsConstructor
Expand All @@ -23,6 +26,7 @@ public class Exercise {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(unique = true)
private String name; // Name of the exercise

@Enumerated(EnumType.STRING)
Expand All @@ -31,7 +35,6 @@ public class Exercise {
@OneToOne(mappedBy = "exercise", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private ExerciseDetail exerciseDetail; // Link to the sets and repetitions

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "training_program_id")
private TrainingProgram trainingProgram;
@ManyToMany(mappedBy = "exercises", fetch = FetchType.LAZY)
private List<TrainingProgram> trainingPrograms = new ArrayList<>();
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,16 @@ public class TrainingProgram {
@Enumerated(EnumType.STRING)
private LocationType locationType; // HOME, GYM, OUTDOOR

@OneToMany(mappedBy = "trainingProgram", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Exercise> exercises; // Exercises linked to the training program
@ManyToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinTable(
name = "training_program_exercise", // Name of the join table
joinColumns = @JoinColumn(name = "training_program_id"), // Foreign key to TrainingProgram
inverseJoinColumns = @JoinColumn(name = "exercise_id") // Foreign key to Exercise
) private List<Exercise> exercises; // Exercises linked to the training program

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "trainer_id", nullable = false)
private User trainer; // The trainer who created the program
@JoinColumn(name = "user_id", nullable = false)
private User trainer;

private String description; // Optional description of the program
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import org.hibernate.annotations.UpdateTimestamp;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

@Getter
Expand Down Expand Up @@ -60,4 +61,8 @@ public class User {

@OneToMany(mappedBy = "user", cascade = CascadeType.ALL, fetch = FetchType.EAGER)
private Set<Post> posts = new HashSet<>();

@OneToMany(mappedBy = "trainer", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<TrainingProgram> trainingPrograms;

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package com.group7.demo.repository;

import com.group7.demo.models.Exercise;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.Optional;

public interface ExerciseRepository extends JpaRepository<Exercise, Long> {
Optional<Exercise> findByName(String name);

}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import com.group7.demo.models.ExerciseDetail;
import com.group7.demo.models.TrainingProgram;
import com.group7.demo.models.User;
import com.group7.demo.repository.ExerciseRepository;
import com.group7.demo.repository.TrainingProgramRepository;
import com.group7.demo.repository.UserRepository;
import jakarta.persistence.EntityNotFoundException;
Expand All @@ -16,6 +17,7 @@
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
Expand All @@ -26,6 +28,7 @@ public class TrainingProgramService {

private final UserRepository userRepository;

private final ExerciseRepository exerciseRepository;
@Transactional
public TrainingProgramResponse createTrainingProgram(TrainingProgramRequest request) {
// Find the trainer by ID (you should have a Trainer/User repository)
Expand All @@ -44,20 +47,22 @@ public TrainingProgramResponse createTrainingProgram(TrainingProgramRequest requ
// Map exercises from request to entity
List<Exercise> exercises = request.getExercises().stream()
.map(exerciseRequest -> {
// Create exercise
Exercise exercise = Exercise.builder()
.name(exerciseRequest.getName())
.muscleGroup(exerciseRequest.getMuscleGroup())
.trainingProgram(trainingProgram)
.build();

// Create exercise detail
// Create exercise detail (assuming `ExerciseRequest` has `getSets()` and `getRepetitions()` methods)
ExerciseDetail exerciseDetail = ExerciseDetail.builder()
.sets(exerciseRequest.getSets())
.repetitions(exerciseRequest.getRepetitions())
.sets(exerciseRequest.getSets()) // Make sure this retrieves the sets from the request
.repetitions(exerciseRequest.getRepetitions()) // Retrieves repetitions from the request
.exercise(exercise)
.build();

// Link the exercise with its exercise detail
exercise.setExerciseDetail(exerciseDetail);

return exercise;
})
.collect(Collectors.toList());
Expand Down

0 comments on commit 8023b34

Please sign in to comment.