diff --git a/demo/src/main/java/com/example/demo/dto/RecipeDto.java b/demo/src/main/java/com/example/demo/dto/RecipeDto.java index e7645b8..22feb25 100644 --- a/demo/src/main/java/com/example/demo/dto/RecipeDto.java +++ b/demo/src/main/java/com/example/demo/dto/RecipeDto.java @@ -10,7 +10,7 @@ public class RecipeDto { private Integer prepTimeMinutes; private Integer cookTimeMinutes; private Integer servings; - private Integer userId; + private UserDto userDto; private String status; private List ingredients; @@ -22,14 +22,14 @@ public class RecipeDto { } public RecipeDto(String title, String description, Integer prepTimeMinutes, Integer cookTimeMinutes, - Integer servings, Integer userId, String status, List ingredients) { + Integer servings, UserDto userDto, String status, List ingredients) { super(); this.title = title; this.description = description; this.prepTimeMinutes = prepTimeMinutes; this.cookTimeMinutes = cookTimeMinutes; this.servings = servings; - this.userId = userId; + this.userDto = userDto; this.status = status; this.ingredients = ingredients; } @@ -66,12 +66,6 @@ public class RecipeDto { public void setServings(Integer servings) { this.servings = servings; } - public Integer getUserId() { - return userId; - } - public void setUserId(Integer userId) { - this.userId = userId; - } public String getStatus() { return status; } @@ -84,5 +78,14 @@ public class RecipeDto { public void setIngredients(List ingredients) { this.ingredients = ingredients; } + + public UserDto getUserDto() { + return userDto; + } + + public void setUserDto(UserDto userDto) { + this.userDto = userDto; + } + } diff --git a/demo/src/main/java/com/example/demo/dto/UserDto.java b/demo/src/main/java/com/example/demo/dto/UserDto.java new file mode 100644 index 0000000..7941a83 --- /dev/null +++ b/demo/src/main/java/com/example/demo/dto/UserDto.java @@ -0,0 +1,19 @@ +package com.example.demo.dto; + +public class UserDto { + private Integer id; + + public UserDto() {} + + public UserDto(Integer id) { + this.id = id; + } + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } +} diff --git a/demo/src/main/java/com/example/demo/entity/Recipe.java b/demo/src/main/java/com/example/demo/entity/Recipe.java index 8f0e7a0..c4ee101 100644 --- a/demo/src/main/java/com/example/demo/entity/Recipe.java +++ b/demo/src/main/java/com/example/demo/entity/Recipe.java @@ -1,6 +1,8 @@ package com.example.demo.entity; import jakarta.persistence.*; +import lombok.EqualsAndHashCode; + import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.HashSet; @@ -23,14 +25,17 @@ public class Recipe { private Integer cookTimeMinutes; private Integer servings; - @Column(name = "user_id", nullable = false) - private Integer userId; - private String status; private LocalDateTime createdAt; private LocalDateTime updatedAt; - + + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "user_id", nullable = false) + @EqualsAndHashCode.Include + private User user; + + // Recipe ingredients relationship @OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) private Set recipeIngredients = new HashSet<>(); @@ -41,13 +46,13 @@ public class Recipe { // Convenience constructor public Recipe(String title, String description, Integer prepTimeMinutes, Integer cookTimeMinutes, - Integer servings, Integer userId, String status) { + Integer servings, User user, String status) { this.title = title; this.description = description; this.prepTimeMinutes = prepTimeMinutes; this.cookTimeMinutes = cookTimeMinutes; this.servings = servings; - this.userId = userId; + this.user = user; this.status = status; this.createdAt = LocalDateTime.now(); this.updatedAt = LocalDateTime.now(); @@ -82,8 +87,17 @@ public class Recipe { public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } - public String getTitle() { return title; } + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } + public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } @@ -97,9 +111,6 @@ public class Recipe { public Integer getServings() { return servings; } public void setServings(Integer servings) { this.servings = servings; } - public Integer getUserId() { return userId; } - public void setUserId(Integer userId) { this.userId = userId; } - public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } diff --git a/demo/src/main/java/com/example/demo/entity/User.java b/demo/src/main/java/com/example/demo/entity/User.java index 4ebdf7b..b32a9a7 100644 --- a/demo/src/main/java/com/example/demo/entity/User.java +++ b/demo/src/main/java/com/example/demo/entity/User.java @@ -1,12 +1,17 @@ package com.example.demo.entity; import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; import jakarta.persistence.Table; import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; +import jakarta.persistence.CascadeType; import jakarta.persistence.Column; import java.time.LocalDateTime; +import java.util.HashSet; +import java.util.Set; @Entity @Table(name = "users") @@ -28,9 +33,13 @@ public class User { @Column(name = "created_at") private LocalDateTime createdAt; + + // User Recipe relationship + @OneToMany(mappedBy = "user", cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.LAZY) + private Set recipes = new HashSet<>(); // Constructors - public User() {} // default constructor required by JPA + public User() {} public User(String username, String role, String email, String hashedpassword, LocalDateTime createdAt) { this.username = username; @@ -40,7 +49,7 @@ public class User { this.createdAt = createdAt; } - // Getters and Setters + public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } diff --git a/demo/src/main/java/com/example/demo/service/Impl/RecipeServiceImpl.java b/demo/src/main/java/com/example/demo/service/Impl/RecipeServiceImpl.java index bcd5cce..0b93223 100644 --- a/demo/src/main/java/com/example/demo/service/Impl/RecipeServiceImpl.java +++ b/demo/src/main/java/com/example/demo/service/Impl/RecipeServiceImpl.java @@ -6,6 +6,7 @@ import java.util.List; import org.springframework.stereotype.Service; import com.example.demo.dto.RecipeDto; +import com.example.demo.dto.UserDto; import com.example.demo.dto.RecipeIngredientDto; import com.example.demo.entity.Ingredient; import com.example.demo.entity.Recipe; @@ -15,22 +16,26 @@ import com.example.demo.exception.NotFoundException; import com.example.demo.repository.IngredientRepo; import com.example.demo.repository.RecipeIngredientRepo; import com.example.demo.repository.RecipeRepo; +import com.example.demo.repository.UserRepo; import com.example.demo.service.RecipeService; import jakarta.transaction.Transactional; @Service public class RecipeServiceImpl implements RecipeService{ + private RecipeRepo recipeRepository; private IngredientRepo ingredientRepository; private RecipeIngredientRepo recipeIngredientRepository; +private UserRepo userRepository; - public RecipeServiceImpl(RecipeRepo recipeRepository, IngredientRepo ingredientRepository, RecipeIngredientRepo recipeIngredientRepository) { + public RecipeServiceImpl(RecipeRepo recipeRepository, IngredientRepo ingredientRepository, RecipeIngredientRepo recipeIngredientRepository, UserRepo userRepository) { super(); this.recipeRepository = recipeRepository; this.ingredientRepository = ingredientRepository; this.recipeIngredientRepository = recipeIngredientRepository; + this.userRepository = userRepository; } public RecipeDto convertToDto(Recipe recipe) { @@ -42,14 +47,15 @@ private RecipeIngredientRepo recipeIngredientRepository; ri.getNotes() )) .toList(); - + + UserDto userDto = new UserDto(recipe.getUser().getId()); return new RecipeDto( recipe.getTitle(), recipe.getDescription(), recipe.getPrepTimeMinutes(), recipe.getCookTimeMinutes(), recipe.getServings(), - recipe.getUserId(), + userDto, recipe.getStatus(), ingredientDtos ); @@ -57,14 +63,17 @@ private RecipeIngredientRepo recipeIngredientRepository; @Override public RecipeDto saveRecipe(RecipeDto dto) { + + User user = userRepository.findById(dto.getUserDto().getId()) + .orElseThrow(() -> new NotFoundException("User", "id", dto.getUserDto().getId())); Recipe recipe = new Recipe( dto.getTitle(), dto.getDescription(), - dto.getPrepTimeMinutes(), + dto.getPrepTimeMinutes(),+ dto.getCookTimeMinutes(), dto.getServings(), - dto.getUserId(), + user, dto.getStatus() );