Skip to content

Instantly share code, notes, and snippets.

@Kamilnaja
Created February 22, 2025 20:44
Show Gist options
  • Save Kamilnaja/1f07be769bbaf519ced018a370428161 to your computer and use it in GitHub Desktop.
Save Kamilnaja/1f07be769bbaf519ced018a370428161 to your computer and use it in GitHub Desktop.
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