Created
February 22, 2025 20:44
-
-
Save Kamilnaja/1f07be769bbaf519ced018a370428161 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Index: diettracker/src/main/java/com/diettracker/backend/repositories/DiaryFoodRepository.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/repositories/DiaryFoodRepository.java b/diettracker/src/main/java/com/diettracker/backend/repositories/DiaryFoodRepository.java | |
new file mode 100644 | |
--- /dev/null (date 1740251702479) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/repositories/DiaryFoodRepository.java (date 1740251702479) | |
@@ -0,0 +1,7 @@ | |
+package com.diettracker.backend.repositories; | |
+ | |
+import com.diettracker.backend.models.DiaryFood; | |
+import org.springframework.data.jpa.repository.JpaRepository; | |
+ | |
+public interface DiaryFoodRepository extends JpaRepository<DiaryFood, Long> { | |
+} | |
Index: diettracker/src/main/java/com/diettracker/backend/models/Diary.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/models/Diary.java b/diettracker/src/main/java/com/diettracker/backend/models/Diary.java | |
--- a/diettracker/src/main/java/com/diettracker/backend/models/Diary.java (revision a6dedbd21d5eb88c0d32f60eb7cf95cddac3babd) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/models/Diary.java (date 1740254246645) | |
@@ -1,6 +1,7 @@ | |
package com.diettracker.backend.models; | |
import jakarta.persistence.*; | |
+ | |
import java.util.Set; | |
@Entity | |
@@ -14,8 +15,11 @@ | |
@Enumerated(EnumType.STRING) | |
private DiaryType name; | |
- @OneToMany(mappedBy = "diary", cascade = CascadeType.ALL, orphanRemoval = true) | |
- private Set<DiaryFood> diaryFoods; | |
+// @OneToMany(mappedBy = "diary", cascade = CascadeType.ALL, orphanRemoval = true) | |
+// private Set<DiaryFood> diaryFoods; | |
+ | |
+ public Diary() { | |
+ } | |
public Diary(DiaryType name) { | |
this.name = name; | |
@@ -36,12 +40,4 @@ | |
public void setName(DiaryType name) { | |
this.name = name; | |
} | |
- | |
- public Set<DiaryFood> getDiaryFoods() { | |
- return diaryFoods; | |
- } | |
- | |
- public void setDiaryFoods(Set<DiaryFood> diaryFoods) { | |
- this.diaryFoods = diaryFoods; | |
- } | |
} | |
Index: diettracker/src/main/java/com/diettracker/backend/services/DiaryService.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/services/DiaryService.java b/diettracker/src/main/java/com/diettracker/backend/services/DiaryService.java | |
new file mode 100644 | |
--- /dev/null (date 1740254006271) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/services/DiaryService.java (date 1740254006271) | |
@@ -0,0 +1,52 @@ | |
+package com.diettracker.backend.services; | |
+ | |
+import com.diettracker.backend.models.Diary; | |
+import com.diettracker.backend.models.DiaryFood; | |
+import com.diettracker.backend.models.DiaryType; | |
+import com.diettracker.backend.models.Food; | |
+import com.diettracker.backend.repositories.DiaryFoodRepository; | |
+import com.diettracker.backend.repositories.DiaryRepository; | |
+import com.diettracker.backend.repositories.FoodRepository; | |
+import jakarta.persistence.EntityNotFoundException; | |
+import jakarta.transaction.Transactional; | |
+import org.springframework.beans.factory.annotation.Autowired; | |
+import org.springframework.stereotype.Service; | |
+ | |
+@Service | |
+@Transactional | |
+public class DiaryService { | |
+ @Autowired | |
+ private DiaryRepository diaryRepository; | |
+ | |
+ @Autowired | |
+ private FoodRepository foodRepository; | |
+ | |
+ @Autowired | |
+ private DiaryFoodRepository diaryFoodRepository; | |
+ | |
+ public DiaryFood addFoodToDiary(Long diaryId, Long foodId, double weight) { | |
+ // First, get the persistent entities from the database | |
+ Diary diary; | |
+ if (diaryId == null) { | |
+ diary = new Diary(DiaryType.BREAKFAST); // Default type, you might want to make this configurable | |
+ diary = diaryRepository.save(diary); | |
+ } else { | |
+ diary = diaryRepository.findById(diaryId).orElseThrow(() -> new EntityNotFoundException("Diary not found")); | |
+ } | |
+ | |
+ | |
+ Food food = foodRepository.findById(foodId).orElseThrow(() -> new EntityNotFoundException("Food not found")); | |
+ | |
+ // Create new DiaryFood with the persistent entities | |
+ DiaryFood diaryFood = new DiaryFood(); | |
+ diaryFood.setDiary(diary); | |
+ diaryFood.setFood(food); | |
+ diaryFood.setWeight(weight); | |
+ | |
+ // Add to diary's collection | |
+// diary.addDiaryFood(diaryFood); | |
+ | |
+ // Save and return | |
+ return diaryFoodRepository.save(diaryFood); | |
+ } | |
+} | |
Index: diettracker/src/main/java/com/diettracker/backend/controllers/DiaryController.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/controllers/DiaryController.java b/diettracker/src/main/java/com/diettracker/backend/controllers/DiaryController.java | |
--- a/diettracker/src/main/java/com/diettracker/backend/controllers/DiaryController.java (revision a6dedbd21d5eb88c0d32f60eb7cf95cddac3babd) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/controllers/DiaryController.java (date 1740254635793) | |
@@ -1,7 +1,16 @@ | |
+// DiaryController.java | |
package com.diettracker.backend.controllers; | |
+import com.diettracker.backend.dto.DiaryFoodDTO; | |
import com.diettracker.backend.models.Diary; | |
+import com.diettracker.backend.models.DiaryFood; | |
+import com.diettracker.backend.models.DiaryType; | |
+import com.diettracker.backend.models.Food; | |
+import com.diettracker.backend.repositories.DiaryFoodRepository; | |
import com.diettracker.backend.repositories.DiaryRepository; | |
+import com.diettracker.backend.requests.AddDiaryFoodRequest; | |
+import com.diettracker.backend.services.DiaryService; | |
+import org.springframework.beans.factory.annotation.Autowired; | |
import org.springframework.http.ResponseEntity; | |
import org.springframework.web.bind.annotation.*; | |
@@ -13,14 +22,18 @@ | |
public class DiaryController { | |
private final DiaryRepository diaryRepository; | |
+ private final DiaryFoodRepository diaryFoodRepository; | |
+ private final DiaryService diaryService; | |
- public DiaryController(DiaryRepository diaryRepository) { | |
+ public DiaryController(DiaryRepository diaryRepository, DiaryFoodRepository diaryFoodRepository, DiaryService diaryService) { | |
this.diaryRepository = diaryRepository; | |
+ this.diaryFoodRepository = diaryFoodRepository; | |
+ this.diaryService = diaryService; | |
} | |
@GetMapping | |
- public List<Diary> getAllDiaries() { | |
- return diaryRepository.findAll(); | |
+ public List<DiaryFood> getAllDiaries() { | |
+ return diaryFoodRepository.findAll(); | |
} | |
@GetMapping("/{id}") | |
@@ -30,8 +43,32 @@ | |
} | |
@PostMapping | |
- public Diary addDiary(@RequestBody Diary diary) { | |
- return diaryRepository.save(diary); | |
+ public ResponseEntity<DiaryFoodDTO> addFoodToDiary(@RequestBody AddDiaryFoodRequest request) { | |
+ DiaryFood diaryFood = diaryService.addFoodToDiary( | |
+ request.getDiaryId(), | |
+ request.getFoodId(), | |
+ request.getWeight() | |
+ ); | |
+ return ResponseEntity.ok(convertToDTO(diaryFood)); | |
+ } | |
+ | |
+ private DiaryFoodDTO convertToDTO(DiaryFood diaryFood) { | |
+ Food food = diaryFood.getFood(); | |
+ double weightRatio = diaryFood.getWeight() / food.getWeight(); | |
+ | |
+ return new DiaryFoodDTO( | |
+ diaryFood.getId(), | |
+ diaryFood.getDiary().getId(), | |
+ food.getId(), | |
+ food.getName(), | |
+ diaryFood.getWeight(), | |
+ Math.round(food.getCalories() * weightRatio * 10.0) / 10.0, | |
+ Math.round(food.getProteins() * weightRatio * 10.0) / 10.0, | |
+ Math.round(food.getFats() * weightRatio * 10.0) / 10.0, | |
+ Math.round(food.getCarbs() * weightRatio * 10.0) / 10.0, | |
+ diaryFood.getCreatedAt(), | |
+ diaryFood.getUpdatedAt() | |
+ ); | |
} | |
} | |
Index: diettracker/src/main/java/com/diettracker/backend/dto/DiaryFoodDTO.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/dto/DiaryFoodDTO.java b/diettracker/src/main/java/com/diettracker/backend/dto/DiaryFoodDTO.java | |
new file mode 100644 | |
--- /dev/null (date 1740254654144) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/dto/DiaryFoodDTO.java (date 1740254654144) | |
@@ -0,0 +1,49 @@ | |
+// DiaryFoodDTO | |
+package com.diettracker.backend.dto; | |
+ | |
+import java.time.LocalDateTime; | |
+ | |
+public class DiaryFoodDTO { | |
+ private final Long id; | |
+ private final Long diaryId; | |
+ private final Long foodId; | |
+ private final String foodName; | |
+ private final double weight; | |
+ private final double calories; | |
+ private final double proteins; | |
+ private final double fats; | |
+ private final double carbs; | |
+ private final LocalDateTime createdAt; | |
+ private final LocalDateTime updatedAt; | |
+ | |
+ public DiaryFoodDTO( | |
+ Long id, Long diaryId, Long foodId, String foodName, | |
+ double weight, double calories, double proteins, | |
+ double fats, double carbs, LocalDateTime createdAt, | |
+ LocalDateTime updatedAt) { | |
+ this.id = id; | |
+ this.diaryId = diaryId; | |
+ this.foodId = foodId; | |
+ this.foodName = foodName; | |
+ this.weight = weight; | |
+ this.calories = calories; | |
+ this.proteins = proteins; | |
+ this.fats = fats; | |
+ this.carbs = carbs; | |
+ this.createdAt = createdAt; | |
+ this.updatedAt = updatedAt; | |
+ } | |
+ | |
+ // Getters | |
+ public Long getId() { return id; } | |
+ public Long getDiaryId() { return diaryId; } | |
+ public Long getFoodId() { return foodId; } | |
+ public String getFoodName() { return foodName; } | |
+ public double getWeight() { return weight; } | |
+ public double getCalories() { return calories; } | |
+ public double getProteins() { return proteins; } | |
+ public double getFats() { return fats; } | |
+ public double getCarbs() { return carbs; } | |
+ public LocalDateTime getCreatedAt() { return createdAt; } | |
+ public LocalDateTime getUpdatedAt() { return updatedAt; } | |
+} | |
\ No newline at end of file | |
Index: diettracker/src/main/java/com/diettracker/backend/requests/AddDiaryFoodRequest.java | |
IDEA additional info: | |
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | |
<+>UTF-8 | |
=================================================================== | |
diff --git a/diettracker/src/main/java/com/diettracker/backend/requests/AddDiaryFoodRequest.java b/diettracker/src/main/java/com/diettracker/backend/requests/AddDiaryFoodRequest.java | |
new file mode 100644 | |
--- /dev/null (date 1740253165117) | |
+++ b/diettracker/src/main/java/com/diettracker/backend/requests/AddDiaryFoodRequest.java (date 1740253165117) | |
@@ -0,0 +1,15 @@ | |
+// AddDiaryFoodRequest.java | |
+package com.diettracker.backend.requests; | |
+public class AddDiaryFoodRequest { | |
+ private Long diaryId; | |
+ private Long foodId; | |
+ private double weight; | |
+ | |
+ // Getters and setters | |
+ public Long getDiaryId() { return diaryId; } | |
+ public void setDiaryId(Long diaryId) { this.diaryId = diaryId; } | |
+ public Long getFoodId() { return foodId; } | |
+ public void setFoodId(Long foodId) { this.foodId = foodId; } | |
+ public double getWeight() { return weight; } | |
+ public void setWeight(double weight) { this.weight = weight; } | |
+} | |
\ No newline at end of file |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment