From 2f521eb190343f59e5186b4c40f0db86e6947490 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Wed, 24 Apr 2024 16:25:51 +0100 Subject: [PATCH 01/16] onboarding done --- .../payload/SaveUserRequest.java | 40 ------------------- .../slimfitbackend/service/UserService.java | 14 +++---- .../com/example/slimfitbackend/util/Util.java | 16 ++++++++ 3 files changed, 22 insertions(+), 48 deletions(-) create mode 100644 src/main/java/com/example/slimfitbackend/util/Util.java diff --git a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java index 72edcbf..4f8bbc2 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java @@ -9,14 +9,6 @@ @Setter public class SaveUserRequest { - private String email; - - private String firstName; - - private String lastName; - - private int age; - private Date dateOfBirth; private double height; @@ -29,38 +21,6 @@ public class SaveUserRequest { private int dailyActivityGoal; - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - public Date getDateOfBirth() { return dateOfBirth; } diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index 94965ae..49570f9 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -10,8 +10,12 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.time.Period; +import java.util.Date; import java.util.Optional; +import static com.example.slimfitbackend.util.Util.yearCountBetweenDates; + @Service public class UserService { @@ -25,13 +29,8 @@ public class UserService { public boolean createNewUser(SaveUserRequest saveUserRequest) { try { - Optional optUser = userRepository.findByEmail(saveUserRequest.getEmail()); - - if (optUser.isPresent()) { - User user = optUser.get(); - user.setFirstName(saveUserRequest.getFirstName()); - user.setLastName(saveUserRequest.getLastName()); - user.setAge(saveUserRequest.getAge()); + User user = getCurrentUser(); + user.setAge(yearCountBetweenDates(saveUserRequest.getDateOfBirth(),new Date())); user.setDateOfBirth(saveUserRequest.getDateOfBirth()); user.setHeight(saveUserRequest.getHeight()); user.setWeight(saveUserRequest.getWeight()); @@ -47,7 +46,6 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { user.setDailyActivityGoal(saveUserRequest.getDailyActivityGoal()); userRepository.save(user); - } return true; } catch (Exception e) { diff --git a/src/main/java/com/example/slimfitbackend/util/Util.java b/src/main/java/com/example/slimfitbackend/util/Util.java new file mode 100644 index 0000000..8773745 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/util/Util.java @@ -0,0 +1,16 @@ +package com.example.slimfitbackend.util; + +import java.time.LocalDate; +import java.time.Period; +import java.time.ZoneId; +import java.util.Date; + +public class Util { + + public static int yearCountBetweenDates(Date startDate, Date endDate){ + LocalDate localDate1 = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate localDate2 = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + Period period = Period.between(localDate1, localDate2); + return period.getYears(); + } +} From c38a27c110555ad4eccba00b66701696e852c19e Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Thu, 25 Apr 2024 17:51:12 +0100 Subject: [PATCH 02/16] log weight --- .../controller/UserController.java | 11 ++++ .../example/slimfitbackend/model/User.java | 10 +++ .../slimfitbackend/model/WeightProgress.java | 31 +++++++++ .../payload/SaveUserWeightRequest.java | 14 ++++ .../payload/UserWeightResponse.java | 18 +++++ .../repository/WeightProgressRepository.java | 7 ++ .../slimfitbackend/service/UserService.java | 65 ++++++++----------- 7 files changed, 117 insertions(+), 39 deletions(-) create mode 100644 src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java create mode 100644 src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java diff --git a/src/main/java/com/example/slimfitbackend/controller/UserController.java b/src/main/java/com/example/slimfitbackend/controller/UserController.java index 6b277e3..9ddbfdb 100644 --- a/src/main/java/com/example/slimfitbackend/controller/UserController.java +++ b/src/main/java/com/example/slimfitbackend/controller/UserController.java @@ -1,6 +1,8 @@ package com.example.slimfitbackend.controller; import com.example.slimfitbackend.payload.GetUserResponse; +import com.example.slimfitbackend.payload.SaveUserWeightRequest; +import com.example.slimfitbackend.payload.UserWeightResponse; import com.example.slimfitbackend.payload.SaveUserRequest; import com.example.slimfitbackend.service.UserService; import org.springframework.beans.factory.annotation.Autowired; @@ -24,4 +26,13 @@ private GetUserResponse getUser() throws Exception { return userService.getUser(); } + @GetMapping("/weight") + private UserWeightResponse getUserWeight() throws Exception { + return userService.getUserWeight(); + } + + @PostMapping("/weight") + private UserWeightResponse saveUserWeight(@RequestBody SaveUserWeightRequest saveUserWeightRequest) throws Exception { + return userService.saveUserWeight(saveUserWeightRequest); + } } diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index 74d6c0f..7e7f0fa 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -47,6 +47,8 @@ public class User implements UserDetails { private String password; + private Date startDate; + @Enumerated(EnumType.STRING) private Role role; @@ -226,4 +228,12 @@ public boolean isCredentialsNonExpired() { public boolean isEnabled() { return true; } + + public Date getStartDate() { + return startDate; + } + + public void setStartDate(Date startDate) { + this.startDate = startDate; + } } diff --git a/src/main/java/com/example/slimfitbackend/model/WeightProgress.java b/src/main/java/com/example/slimfitbackend/model/WeightProgress.java index 489a1e7..1949530 100644 --- a/src/main/java/com/example/slimfitbackend/model/WeightProgress.java +++ b/src/main/java/com/example/slimfitbackend/model/WeightProgress.java @@ -24,4 +24,35 @@ public class WeightProgress { private Date date; + public Long getWeightProgressId() { + return weightProgressId; + } + + public void setWeightProgressId(Long weightProgressId) { + this.weightProgressId = weightProgressId; + } + + public User getUser() { + return user; + } + + public void setUser(User user) { + this.user = user; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } + + public Date getDate() { + return date; + } + + public void setDate(Date date) { + this.date = date; + } } diff --git a/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java b/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java new file mode 100644 index 0000000..f9fe0f1 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java @@ -0,0 +1,14 @@ +package com.example.slimfitbackend.payload; + +public class SaveUserWeightRequest { + + private double weight; + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } +} diff --git a/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java new file mode 100644 index 0000000..106e2c8 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java @@ -0,0 +1,18 @@ +package com.example.slimfitbackend.payload; + +public class UserWeightResponse { + + private double weight; + + public UserWeightResponse(double weight) { + this.weight = weight; + } + + public double getWeight() { + return weight; + } + + public void setWeight(double weight) { + this.weight = weight; + } +} diff --git a/src/main/java/com/example/slimfitbackend/repository/WeightProgressRepository.java b/src/main/java/com/example/slimfitbackend/repository/WeightProgressRepository.java index 8d3de36..8dbafa4 100644 --- a/src/main/java/com/example/slimfitbackend/repository/WeightProgressRepository.java +++ b/src/main/java/com/example/slimfitbackend/repository/WeightProgressRepository.java @@ -1,9 +1,16 @@ package com.example.slimfitbackend.repository; +import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.model.WeightProgress; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; +import java.util.Optional; + @Repository public interface WeightProgressRepository extends JpaRepository { + + List findAllByUserOrderByDate(User user); + } diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index 49570f9..6a926ef 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -1,17 +1,21 @@ package com.example.slimfitbackend.service; import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.WeightProgress; import com.example.slimfitbackend.payload.GetUserResponse; +import com.example.slimfitbackend.payload.SaveUserWeightRequest; +import com.example.slimfitbackend.payload.UserWeightResponse; import com.example.slimfitbackend.payload.SaveUserRequest; import com.example.slimfitbackend.payload.common.MapStructMapper; import com.example.slimfitbackend.repository.UserRepository; +import com.example.slimfitbackend.repository.WeightProgressRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.time.Period; import java.util.Date; +import java.util.List; import java.util.Optional; import static com.example.slimfitbackend.util.Util.yearCountBetweenDates; @@ -25,6 +29,9 @@ public class UserService { @Autowired private UserRepository userRepository; + @Autowired + private WeightProgressRepository weightProgressRepository; + @Transactional public boolean createNewUser(SaveUserRequest saveUserRequest) { @@ -35,6 +42,7 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { user.setHeight(saveUserRequest.getHeight()); user.setWeight(saveUserRequest.getWeight()); user.setGender(saveUserRequest.getGender()); + user.setStartDate(new Date()); //1 == male 2 == female if (user.getGender() == 1) { @@ -68,41 +76,20 @@ public GetUserResponse getUser() throws Exception { return mapStructMapper.userToGetUserResponse(getCurrentUser()); } -} - - -// User user = optUser.get(); -// if(saveUserRequest.getFirstName() != null){ -// user.setFirstName(saveUserRequest.getFirstName()); -// } -// if(saveUserRequest.getLastName() != null){ -// user.setLastName(saveUserRequest.getLastName()); -// } -// if(saveUserRequest.getAge() != 0){ -// user.setAge(saveUserRequest.getAge()); -// } -// if(saveUserRequest.getDateOfBirth() != null){ -// user.setDateOfBirth(saveUserRequest.getDateOfBirth()); -// } -// if(saveUserRequest.getHeight() != 0){ -// user.setHeight(saveUserRequest.getHeight()); -// } -// if(saveUserRequest.getWeight() != 0){ -// user.setWeight(saveUserRequest.getWeight()); -// } -// if(saveUserRequest.getGender() != 0){ -// user.setGender(saveUserRequest.getGender()); -// -// //1 == male 2 == female -// if(user.getGender() == 1){ -// user.setBmr(88.362 + (13.397 * user.getWeight()) + (4.799 * user.getHeight()) - (5.677 * user.getAge())); -// } else if (user.getGender() == 2){ -// user.setBmr(447.593 + (9.247 * user.getWeight()) + (3.098 * user.getHeight()) - (4.330 * user.getAge())); -// } -// } -// if(saveUserRequest.getWeeklyWeightLossGoal() != 0){ -// user.setWeeklyWeightLossGoal(saveUserRequest.getWeeklyWeightLossGoal()); -// } -// -// user.setDailyActivityGoal(saveUserRequest.getDailyActivityGoal()); -// userRepository.save(user); \ No newline at end of file + + public UserWeightResponse getUserWeight() throws Exception { + User user = getCurrentUser(); + List userWeightLogs = weightProgressRepository.findAllByUserOrderByDate(user); + System.out.println(userWeightLogs); + return new UserWeightResponse(userWeightLogs.get(userWeightLogs.size() - 1).getWeight()); + } + + public UserWeightResponse saveUserWeight(SaveUserWeightRequest saveUserWeightRequest) throws Exception { + WeightProgress weightProgress = new WeightProgress(); + weightProgress.setWeight(saveUserWeightRequest.getWeight()); + weightProgress.setDate(new Date()); + weightProgress.setUser(getCurrentUser()); + weightProgressRepository.save(weightProgress); + return new UserWeightResponse(weightProgress.getWeight()); + } +} \ No newline at end of file From 98c2afa06e9585ce72374b61a6a2f3ae3f634042 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Fri, 26 Apr 2024 21:17:23 +0100 Subject: [PATCH 03/16] log food in prog --- pom.xml | 3 +- .../payload/FoodCalResponse.java | 5 +++ .../payload/SearchFoodCalResponse.java | 5 --- .../service/DailyCalorieService.java | 2 - .../service/IntakeRecordService.java | 41 ++++++++++++------- 5 files changed, 34 insertions(+), 22 deletions(-) diff --git a/pom.xml b/pom.xml index c1a5e19..467d0be 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,8 @@ org.projectlombok lombok - true + 1.18.8 + provided org.springframework.boot diff --git a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java index 9b1039b..f5c35f7 100644 --- a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java @@ -1,8 +1,13 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; +@Getter +@Setter public class FoodCalResponse { private String foodName; + private double cal; public FoodCalResponse(String foodName, double cal) { diff --git a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java index f465603..3add8ec 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java @@ -8,11 +8,6 @@ public class SearchFoodCalResponse { private List hintedFoods; - public SearchFoodCalResponse(FoodCalResponse matchFood, List hintedFoods) { - this.matchFood = matchFood; - this.hintedFoods = hintedFoods; - } - public FoodCalResponse getMatchFood() { return matchFood; } diff --git a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java index b19a227..bb86173 100644 --- a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java +++ b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java @@ -86,8 +86,6 @@ private DailyCalorie createNewDailyCalorie(User user, Date date) { devideCaloriesForMeals(dailyCalorieIntake, dailyCalorie); dailyCalorie.setDailyActivityActual(0); dailyCalorie.setDailyActivityGoal(user.getDailyActivityGoal()); - dailyCalorie.setDailyActual(0); - dailyCalorie.setDailyGoal(user.getDailyActivityGoal()); return dailyCalorie; } } diff --git a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java index 5807124..12af431 100644 --- a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java +++ b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java @@ -5,8 +5,6 @@ import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.payload.*; import com.example.slimfitbackend.payload.common.MapStructMapper; -import com.example.slimfitbackend.repository.ActivityTypeRepository; -import com.example.slimfitbackend.repository.DailyCalorieRepository; import com.example.slimfitbackend.repository.IntakeRecordRepository; import com.fasterxml.jackson.core.JsonProcessingException; import org.json.JSONArray; @@ -17,7 +15,7 @@ import org.json.JSONObject; import java.util.ArrayList; -import java.util.Optional; +import java.util.Objects; @Service public class IntakeRecordService { @@ -43,11 +41,18 @@ public SearchFoodCalResponse getCalorieForFood(SearchFoodCalRequest searchFoodCa JSONObject body = new JSONObject(json1.toString()); Object parsed = body.get("parsed"); JSONArray jsonArray = new JSONArray(parsed.toString()); - JSONObject jsonObject = jsonArray.getJSONObject(0); - JSONObject foodObject = jsonObject.getJSONObject("food"); - JSONObject nutrientsObject = foodObject.getJSONObject("nutrients"); - String name = foodObject.getString("label"); - double enercKcal = nutrientsObject.getDouble("ENERC_KCAL"); + + SearchFoodCalResponse searchFoodCalResponse = new SearchFoodCalResponse(); + try{ + JSONObject jsonObject = jsonArray.getJSONObject(0); + JSONObject foodObject = jsonObject.getJSONObject("food"); + JSONObject nutrientsObject = foodObject.getJSONObject("nutrients"); + String name = foodObject.getString("label"); + double enercKcal = nutrientsObject.getDouble("ENERC_KCAL"); + searchFoodCalResponse.setMatchFood(new FoodCalResponse(name,enercKcal)); + }catch (Exception ignored){ + searchFoodCalResponse.setMatchFood(null); + } Object hints = body.get("hints"); JSONArray hintsJsonArray = new JSONArray(hints.toString()); @@ -58,20 +63,28 @@ public SearchFoodCalResponse getCalorieForFood(SearchFoodCalRequest searchFoodCa JSONObject hintJsonObject = hintsJsonArray.getJSONObject(0); JSONObject hintFoodObject = hintJsonObject.getJSONObject("food"); JSONObject hintNutrientsObject = hintFoodObject.getJSONObject("nutrients"); - - foodCalResponses.add(new FoodCalResponse(hintFoodObject.getString("label"), hintNutrientsObject.getDouble("ENERC_KCAL"))); + String foodLabel = hintFoodObject.getString("label"); + if(!doesFoodAlreadyExist(foodCalResponses,foodLabel)) + foodCalResponses.add(new FoodCalResponse(foodLabel, hintNutrientsObject.getDouble("ENERC_KCAL"))); } + searchFoodCalResponse.setHintedFoods(foodCalResponses); + return searchFoodCalResponse; + } - return new SearchFoodCalResponse(new FoodCalResponse(name, enercKcal), foodCalResponses); + private boolean doesFoodAlreadyExist(ArrayList foodCalResponses,String name){ + for (FoodCalResponse foodCalResponse : foodCalResponses) { + if(Objects.equals(foodCalResponse.getFoodName(), name)) + return true; + } + return false; } public IntakeRecordResponse saveNewIntakeRecord(IntakeRecordRequest intakeRecordRequest) throws Exception { - + User user = userService.getCurrentUser(); IntakeRecord intakeRecord = new IntakeRecord(); intakeRecord.setCalorieCount(intakeRecordRequest.getCalorieCount()); intakeRecord.setMealName(intakeRecordRequest.getMealName()); intakeRecord.setNote(intakeRecordRequest.getNote()); - User user = userService.getCurrentUser(); DailyCalorie dailyCal = dailyCalorieService.getDailyCalorie(user, intakeRecordRequest.getDate()); switch ((int) intakeRecordRequest.getMeal()) { @@ -83,7 +96,7 @@ public IntakeRecordResponse saveNewIntakeRecord(IntakeRecordRequest intakeRecord default -> { } } - + dailyCal.setDailyActual(dailyCal.getDailyActual() + intakeRecordRequest.getCalorieCount()); intakeRecord.setDailyCalorie(dailyCal); intakeRecord = intakeRecordRepository.save(intakeRecord); return mapStructMapper.itakeRecordToIntakeRecordResponse(intakeRecord); From 1e8a4233a964197aa27ec47217147d5c5ff81691 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Sat, 27 Apr 2024 15:33:38 +0100 Subject: [PATCH 04/16] Before Getter and setter fix --- pom.xml | 10 +++ .../controller/IntakeRecordController.java | 8 ++- .../controller/ProgressController.java | 28 ++++++++ .../example/slimfitbackend/model/User.java | 12 +++- .../payload/AuthenticationResponse.java | 11 ---- .../payload/UserWeightResponse.java | 17 +++-- .../service/AuthenticationService.java | 2 +- .../service/ProgressService.java | 65 +++++++++++++++++++ .../slimfitbackend/service/UserService.java | 37 ++++++----- 9 files changed, 152 insertions(+), 38 deletions(-) create mode 100644 src/main/java/com/example/slimfitbackend/controller/ProgressController.java create mode 100644 src/main/java/com/example/slimfitbackend/service/ProgressService.java diff --git a/pom.xml b/pom.xml index 467d0be..4324304 100644 --- a/pom.xml +++ b/pom.xml @@ -133,6 +133,16 @@ mapstruct-processor 1.5.5.Final + + org.projectlombok + lombok + ${lombok.version} + + + org.projectlombok + lombok-mapstruct-binding + 0.2.0 + diff --git a/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java b/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java index 6b0564c..68c7487 100644 --- a/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java +++ b/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java @@ -20,7 +20,13 @@ public class IntakeRecordController { @PostMapping("/newRecord") public IntakeRecordResponse addNewRecord(@RequestBody IntakeRecordRequest intakeRecordRequest) throws Exception { - return intakeRecordService.saveNewIntakeRecord(intakeRecordRequest); + try{ + IntakeRecordResponse t = intakeRecordService.saveNewIntakeRecord(intakeRecordRequest); + return t; + }catch(Exception e){ + System.out.println(e.getMessage()); + } + return null; } } diff --git a/src/main/java/com/example/slimfitbackend/controller/ProgressController.java b/src/main/java/com/example/slimfitbackend/controller/ProgressController.java new file mode 100644 index 0000000..5b4d693 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/controller/ProgressController.java @@ -0,0 +1,28 @@ +package com.example.slimfitbackend.controller; + +import com.example.slimfitbackend.payload.UserWeightResponse; +import com.example.slimfitbackend.service.ProgressService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +@RequestMapping("/api/v1/progress") +public class ProgressController { + + @Autowired + private ProgressService progressService; + + @GetMapping("/actual") + private List getAllUserWeight() throws Exception { + return progressService.getActualWeightProgress(); + } + + @GetMapping("/goal") + private List getUserGoal() throws Exception { + return progressService.getUserGoal(); + } +} diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index 7e7f0fa..6baea28 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -13,10 +13,8 @@ import java.util.List; @Entity -@Data @EnableAutoConfiguration @Table(name = "\"user\"") -@Builder public class User implements UserDetails { @Id @@ -49,6 +47,8 @@ public class User implements UserDetails { private Date startDate; + private double startWeight; + @Enumerated(EnumType.STRING) private Role role; @@ -236,4 +236,12 @@ public Date getStartDate() { public void setStartDate(Date startDate) { this.startDate = startDate; } + + public double getStartWeight() { + return startWeight; + } + + public void setStartWeight(double startWeight) { + this.startWeight = startWeight; + } } diff --git a/src/main/java/com/example/slimfitbackend/payload/AuthenticationResponse.java b/src/main/java/com/example/slimfitbackend/payload/AuthenticationResponse.java index 32e00a0..4ebcc92 100644 --- a/src/main/java/com/example/slimfitbackend/payload/AuthenticationResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/AuthenticationResponse.java @@ -18,15 +18,4 @@ public class AuthenticationResponse { @JsonProperty("token") private String token; - public AuthenticationResponse(String token) { - this.token = token; - } - - public String getToken() { - return token; - } - - public void setToken(String token) { - this.token = token; - } } \ No newline at end of file diff --git a/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java index 106e2c8..4a4ef0e 100644 --- a/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java @@ -1,18 +1,25 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + +import java.util.Date; + +@Setter +@Getter public class UserWeightResponse { private double weight; + private Date date; + public UserWeightResponse(double weight) { this.weight = weight; } - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { + public UserWeightResponse(double weight, Date date) { this.weight = weight; + this.date = date; } + } diff --git a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java index 14691a7..f47f27b 100644 --- a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java +++ b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java @@ -30,7 +30,7 @@ public class AuthenticationService { public AuthenticationResponse register(RegisterRequest request) { - var user = new User(request.getEmail(),request.getFirstname(),request.getLastname(),passwordEncoder.encode(request.getPassword())); + var user = new User(request.getEmail(), request.getFirstname(), request.getLastname(), passwordEncoder.encode(request.getPassword())); userRepository.save(user); var jwtToken = jwtService.generateToken(user); return new AuthenticationResponse(jwtToken); diff --git a/src/main/java/com/example/slimfitbackend/service/ProgressService.java b/src/main/java/com/example/slimfitbackend/service/ProgressService.java new file mode 100644 index 0000000..6ea5d5c --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/service/ProgressService.java @@ -0,0 +1,65 @@ +package com.example.slimfitbackend.service; + + +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.WeightProgress; +import com.example.slimfitbackend.payload.UserWeightResponse; +import com.example.slimfitbackend.repository.WeightProgressRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.time.LocalDate; +import java.time.ZoneId; + +@Service +public class ProgressService { + + @Autowired + private WeightProgressRepository weightProgressRepository; + + @Autowired + private UserService userService; + + public List getActualWeightProgress() throws Exception { + User user = userService.getCurrentUser(); + List weightProgresses = weightProgressRepository.findAllByUserOrderByDate(user); + List userWeightResponses = new ArrayList<>(); + for (WeightProgress weightProgress : weightProgresses) { + userWeightResponses.add(new UserWeightResponse(weightProgress.getWeight(), weightProgress.getDate())); + } + return userWeightResponses; + } + + public List getUserGoal() throws Exception { + User user = userService.getCurrentUser(); + List dateList = generateDateListPerWeek(user.getStartDate(), new Date()); + List userWeightResponses = new ArrayList<>(); + double currentWeight = user.getStartWeight(); + for (Date date : dateList) { + userWeightResponses.add(new UserWeightResponse(currentWeight, date)); + currentWeight = ((currentWeight * 1000) - user.getWeeklyWeightLossGoal()) / 1000; + } + return userWeightResponses; + } + + public static List generateDateListPerWeek(Date startDate, Date endDate) { + List dateList = new ArrayList<>(); + + // Convert input Date objects to LocalDate + LocalDate startLocalDate = startDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate endLocalDate = endDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + + LocalDate currentDate = startLocalDate; + + while (currentDate.isBefore(endLocalDate)) { + // Convert LocalDate back to Date + dateList.add(Date.from(currentDate.atStartOfDay(ZoneId.systemDefault()).toInstant())); + currentDate = currentDate.plusWeeks(1); + } + + return dateList; + } +} diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index 6a926ef..fcfbe83 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -37,23 +37,24 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { try { User user = getCurrentUser(); - user.setAge(yearCountBetweenDates(saveUserRequest.getDateOfBirth(),new Date())); - user.setDateOfBirth(saveUserRequest.getDateOfBirth()); - user.setHeight(saveUserRequest.getHeight()); - user.setWeight(saveUserRequest.getWeight()); - user.setGender(saveUserRequest.getGender()); - user.setStartDate(new Date()); - - //1 == male 2 == female - if (user.getGender() == 1) { - user.setBmr(88.362 + (13.397 * user.getWeight()) + (4.799 * user.getHeight()) - (5.677 * user.getAge())); - } else if (user.getGender() == 2) { - user.setBmr(447.593 + (9.247 * user.getWeight()) + (3.098 * user.getHeight()) - (4.330 * user.getAge())); - } - user.setWeeklyWeightLossGoal(saveUserRequest.getWeeklyWeightLossGoal()); - - user.setDailyActivityGoal(saveUserRequest.getDailyActivityGoal()); - userRepository.save(user); + user.setAge(yearCountBetweenDates(saveUserRequest.getDateOfBirth(), new Date())); + user.setDateOfBirth(saveUserRequest.getDateOfBirth()); + user.setHeight(saveUserRequest.getHeight()); + user.setWeight(saveUserRequest.getWeight()); + user.setStartWeight(saveUserRequest.getWeight()); + user.setGender(saveUserRequest.getGender()); + user.setStartDate(new Date()); + + //1 == male 2 == female + if (user.getGender() == 1) { + user.setBmr(88.362 + (13.397 * user.getWeight()) + (4.799 * user.getHeight()) - (5.677 * user.getAge())); + } else if (user.getGender() == 2) { + user.setBmr(447.593 + (9.247 * user.getWeight()) + (3.098 * user.getHeight()) - (4.330 * user.getAge())); + } + user.setWeeklyWeightLossGoal(saveUserRequest.getWeeklyWeightLossGoal()); + + user.setDailyActivityGoal(saveUserRequest.getDailyActivityGoal()); + userRepository.save(user); return true; } catch (Exception e) { @@ -64,7 +65,7 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { public User getCurrentUser() throws Exception { String email = SecurityContextHolder.getContext().getAuthentication().getName(); Optional optUser = userRepository.findByEmail(email); - if (optUser.isPresent()){ + if (optUser.isPresent()) { return optUser.get(); } else { throw new Exception(); From 870d767466bed2061184c149acf623e08ca43aa8 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Sat, 27 Apr 2024 15:50:29 +0100 Subject: [PATCH 05/16] payload Getter and setter fix --- .../example/slimfitbackend/model/User.java | 8 ++ .../payload/AuthenticationRequest.java | 20 +-- .../payload/DailyCalorieResponseDto.java | 97 +------------- .../payload/FoodCalResponse.java | 26 +--- .../payload/GetActivitiesResponse.java | 23 +--- .../payload/GetDailyCalorieDto.java | 7 - .../payload/GetUserResponse.java | 100 +------------- .../payload/IntakeRecordRequest.java | 44 +------ .../payload/MessageResponse.java | 36 +----- .../payload/NewActivityRequest.java | 43 +----- .../payload/NewActivityResponse.java | 36 +----- .../payload/PredictCalorieRequest.java | 25 ---- .../payload/PredictCalorieResponse.java | 7 - .../payload/RegisterRequest.java | 42 +----- .../payload/SaveUserRequest.java | 49 +------ .../payload/SaveUserWeightRequest.java | 12 +- .../payload/SearchFoodCalRequest.java | 12 +- .../payload/SearchFoodCalResponse.java | 20 +-- .../payload/SendMessageRequest.java | 13 +- .../payload/UserWeightResponse.java | 7 +- .../service/MessageServiceTest.java | 122 ++++++++++++++++++ 21 files changed, 192 insertions(+), 557 deletions(-) create mode 100644 src/test/java/com/example/slimfitbackend/service/MessageServiceTest.java diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index 6baea28..a690bd2 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -244,4 +244,12 @@ public double getStartWeight() { public void setStartWeight(double startWeight) { this.startWeight = startWeight; } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } } diff --git a/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java b/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java index ddf6689..9314c65 100644 --- a/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java @@ -3,27 +3,15 @@ import lombok.Builder; import lombok.Data; +import lombok.Getter; +import lombok.Setter; -@Data +@Setter +@Getter @Builder public class AuthenticationRequest { String email; String password; - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java b/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java index 52c6c8c..ecf2425 100644 --- a/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java +++ b/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java @@ -6,6 +6,8 @@ import java.util.Date; +@Setter +@Getter public class DailyCalorieResponseDto { private long dailyCalorieId; @@ -32,99 +34,4 @@ public class DailyCalorieResponseDto { private Date date; - public long getDailyCalorieId() { - return dailyCalorieId; - } - - public void setDailyCalorieId(long dailyCalorieId) { - this.dailyCalorieId = dailyCalorieId; - } - - public long getBreakfastGoal() { - return breakfastGoal; - } - - public void setBreakfastGoal(long breakfastGoal) { - this.breakfastGoal = breakfastGoal; - } - - public long getBreakfastActual() { - return breakfastActual; - } - - public void setBreakfastActual(long breakfastActual) { - this.breakfastActual = breakfastActual; - } - - public long getLunchGoal() { - return lunchGoal; - } - - public void setLunchGoal(long lunchGoal) { - this.lunchGoal = lunchGoal; - } - - public long getLunchActual() { - return lunchActual; - } - - public void setLunchActual(long lunchActual) { - this.lunchActual = lunchActual; - } - - public long getDinnerGoal() { - return dinnerGoal; - } - - public void setDinnerGoal(long dinnerGoal) { - this.dinnerGoal = dinnerGoal; - } - - public long getDinnerActual() { - return dinnerActual; - } - - public void setDinnerActual(long dinnerActual) { - this.dinnerActual = dinnerActual; - } - - public long getSnackGoal() { - return snackGoal; - } - - public void setSnackGoal(long snackGoal) { - this.snackGoal = snackGoal; - } - - public long getSnackActual() { - return snackActual; - } - - public void setSnackActual(long snackActual) { - this.snackActual = snackActual; - } - - public long getDailyGoal() { - return dailyGoal; - } - - public void setDailyGoal(long dailyGoal) { - this.dailyGoal = dailyGoal; - } - - public long getDailyActual() { - return dailyActual; - } - - public void setDailyActual(long dailyActual) { - this.dailyActual = dailyActual; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java index f5c35f7..3da9b09 100644 --- a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java @@ -1,33 +1,15 @@ package com.example.slimfitbackend.payload; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; -@Getter + @Setter +@Getter +@AllArgsConstructor public class FoodCalResponse { private String foodName; - private double cal; - public FoodCalResponse(String foodName, double cal) { - this.foodName = foodName; - this.cal = cal; - } - - public String getFoodName() { - return foodName; - } - - public void setFoodName(String foodName) { - this.foodName = foodName; - } - - public double getCal() { - return cal; - } - - public void setCal(double cal) { - this.cal = cal; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/GetActivitiesResponse.java b/src/main/java/com/example/slimfitbackend/payload/GetActivitiesResponse.java index 471eca0..363b848 100644 --- a/src/main/java/com/example/slimfitbackend/payload/GetActivitiesResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/GetActivitiesResponse.java @@ -4,29 +4,12 @@ import lombok.Getter; import lombok.Setter; +@Setter +@Getter +@AllArgsConstructor public class GetActivitiesResponse { private String label; private long value; - public GetActivitiesResponse(String label, long value) { - this.label = label; - this.value = value; - } - - public String getLabel() { - return label; - } - - public void setLabel(String label) { - this.label = label; - } - - public long getValue() { - return value; - } - - public void setValue(long value) { - this.value = value; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/GetDailyCalorieDto.java b/src/main/java/com/example/slimfitbackend/payload/GetDailyCalorieDto.java index e15ba23..1515ef5 100644 --- a/src/main/java/com/example/slimfitbackend/payload/GetDailyCalorieDto.java +++ b/src/main/java/com/example/slimfitbackend/payload/GetDailyCalorieDto.java @@ -15,11 +15,4 @@ public class GetDailyCalorieDto { @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) private Date date; - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java b/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java index 39004a1..cae0f8d 100644 --- a/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java @@ -1,7 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + import java.util.Date; +@Setter +@Getter public class GetUserResponse { private Long userId; @@ -28,99 +33,4 @@ public class GetUserResponse { private int dailyActivityGoal; - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public double getHeight() { - return height; - } - - public void setHeight(double height) { - this.height = height; - } - - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } - - public int getGender() { - return gender; - } - - public void setGender(int gender) { - this.gender = gender; - } - - public double getBmr() { - return bmr; - } - - public void setBmr(double bmr) { - this.bmr = bmr; - } - - public int getWeeklyWeightLossGoal() { - return weeklyWeightLossGoal; - } - - public void setWeeklyWeightLossGoal(int weeklyWeightLossGoal) { - this.weeklyWeightLossGoal = weeklyWeightLossGoal; - } - - public int getDailyActivityGoal() { - return dailyActivityGoal; - } - - public void setDailyActivityGoal(int dailyActivityGoal) { - this.dailyActivityGoal = dailyActivityGoal; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/IntakeRecordRequest.java b/src/main/java/com/example/slimfitbackend/payload/IntakeRecordRequest.java index 925551e..3bb5757 100644 --- a/src/main/java/com/example/slimfitbackend/payload/IntakeRecordRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/IntakeRecordRequest.java @@ -1,7 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + import java.util.Date; +@Setter +@Getter public class IntakeRecordRequest { private Date date; @@ -14,43 +19,4 @@ public class IntakeRecordRequest { private long meal; - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public long getCalorieCount() { - return calorieCount; - } - - public void setCalorieCount(long calorieCount) { - this.calorieCount = calorieCount; - } - - public String getMealName() { - return mealName; - } - - public void setMealName(String mealName) { - this.mealName = mealName; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public long getMeal() { - return meal; - } - - public void setMeal(long meal) { - this.meal = meal; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/MessageResponse.java b/src/main/java/com/example/slimfitbackend/payload/MessageResponse.java index 9426281..764fdf0 100644 --- a/src/main/java/com/example/slimfitbackend/payload/MessageResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/MessageResponse.java @@ -1,7 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + import java.util.Date; +@Setter +@Getter public class MessageResponse { private Long id; @@ -12,35 +17,4 @@ public class MessageResponse { private String username; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public String getUsername() { - return username; - } - - public void setUsername(String username) { - this.username = username; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/NewActivityRequest.java b/src/main/java/com/example/slimfitbackend/payload/NewActivityRequest.java index 7457238..a2a7d23 100644 --- a/src/main/java/com/example/slimfitbackend/payload/NewActivityRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/NewActivityRequest.java @@ -1,9 +1,13 @@ package com.example.slimfitbackend.payload; import com.example.slimfitbackend.model.ActivityType; +import lombok.Getter; +import lombok.Setter; import java.util.Date; +@Setter +@Getter public class NewActivityRequest { private long activityType; @@ -16,43 +20,4 @@ public class NewActivityRequest { private Date date; - public long getActivityType() { - return activityType; - } - - public void setActivityType(long activityType) { - this.activityType = activityType; - } - - public long getCalorie() { - return calorie; - } - - public void setCalorie(long calorie) { - this.calorie = calorie; - } - - public long getDuration() { - return duration; - } - - public void setDuration(long duration) { - this.duration = duration; - } - - public long getIntensity() { - return intensity; - } - - public void setIntensity(long intensity) { - this.intensity = intensity; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/NewActivityResponse.java b/src/main/java/com/example/slimfitbackend/payload/NewActivityResponse.java index a5c761e..63a6f78 100644 --- a/src/main/java/com/example/slimfitbackend/payload/NewActivityResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/NewActivityResponse.java @@ -1,7 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + import java.util.Date; +@Setter +@Getter public class NewActivityResponse { private long calorie; @@ -12,35 +17,4 @@ public class NewActivityResponse { private Date date; - public long getCalorie() { - return calorie; - } - - public void setCalorie(long calorie) { - this.calorie = calorie; - } - - public long getDuration() { - return duration; - } - - public void setDuration(long duration) { - this.duration = duration; - } - - public long getIntensity() { - return intensity; - } - - public void setIntensity(long intensity) { - this.intensity = intensity; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/PredictCalorieRequest.java b/src/main/java/com/example/slimfitbackend/payload/PredictCalorieRequest.java index b195bd0..ba1aebd 100644 --- a/src/main/java/com/example/slimfitbackend/payload/PredictCalorieRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/PredictCalorieRequest.java @@ -8,32 +8,7 @@ public class PredictCalorieRequest { private int intensity; - private Long actId; - private long duration; - public int getIntensity() { - return intensity; - } - - public void setIntensity(int intensity) { - this.intensity = intensity; - } - - public Long getActId() { - return actId; - } - - public void setActId(Long actId) { - this.actId = actId; - } - - public long getDuration() { - return duration; - } - - public void setDuration(long duration) { - this.duration = duration; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/PredictCalorieResponse.java b/src/main/java/com/example/slimfitbackend/payload/PredictCalorieResponse.java index 85c0018..942f92d 100644 --- a/src/main/java/com/example/slimfitbackend/payload/PredictCalorieResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/PredictCalorieResponse.java @@ -9,11 +9,4 @@ public class PredictCalorieResponse { private double calorie; - public double getCalorie() { - return calorie; - } - - public void setCalorie(double calorie) { - this.calorie = calorie; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java b/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java index 82b8f48..658e3ee 100644 --- a/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java @@ -1,15 +1,11 @@ package com.example.slimfitbackend.payload; import com.example.slimfitbackend.model.Role; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import lombok.*; -@Data +@Setter +@Getter @Builder -@AllArgsConstructor -@NoArgsConstructor public class RegisterRequest { private String firstname; @@ -17,36 +13,4 @@ public class RegisterRequest { private String email; private String password; - public String getFirstname() { - return firstname; - } - - public void setFirstname(String firstname) { - this.firstname = firstname; - } - - public String getLastname() { - return lastname; - } - - public void setLastname(String lastname) { - this.lastname = lastname; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getPassword() { - return password; - } - - public void setPassword(String password) { - this.password = password; - } - } \ No newline at end of file diff --git a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java index 4f8bbc2..4ff3047 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java @@ -5,8 +5,8 @@ import java.util.Date; -@Getter @Setter +@Getter public class SaveUserRequest { private Date dateOfBirth; @@ -21,51 +21,4 @@ public class SaveUserRequest { private int dailyActivityGoal; - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public double getHeight() { - return height; - } - - public void setHeight(double height) { - this.height = height; - } - - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } - - public int getGender() { - return gender; - } - - public void setGender(int gender) { - this.gender = gender; - } - - public int getWeeklyWeightLossGoal() { - return weeklyWeightLossGoal; - } - - public void setWeeklyWeightLossGoal(int weeklyWeightLossGoal) { - this.weeklyWeightLossGoal = weeklyWeightLossGoal; - } - - public int getDailyActivityGoal() { - return dailyActivityGoal; - } - - public void setDailyActivityGoal(int dailyActivityGoal) { - this.dailyActivityGoal = dailyActivityGoal; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java b/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java index f9fe0f1..f2cfd97 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SaveUserWeightRequest.java @@ -1,14 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter public class SaveUserWeightRequest { private double weight; - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalRequest.java b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalRequest.java index 66bda08..f2dcb0e 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalRequest.java @@ -1,14 +1,12 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + +@Setter +@Getter public class SearchFoodCalRequest { private String foodName; - public String getFoodName() { - return foodName; - } - - public void setFoodName(String foodName) { - this.foodName = foodName; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java index 3add8ec..4c0c992 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/SearchFoodCalResponse.java @@ -1,26 +1,16 @@ package com.example.slimfitbackend.payload; +import lombok.Getter; +import lombok.Setter; + import java.util.List; +@Setter +@Getter public class SearchFoodCalResponse { private FoodCalResponse matchFood; private List hintedFoods; - public FoodCalResponse getMatchFood() { - return matchFood; - } - - public void setMatchFood(FoodCalResponse matchFood) { - this.matchFood = matchFood; - } - - public List getHintedFoods() { - return hintedFoods; - } - - public void setHintedFoods(List hintedFoods) { - this.hintedFoods = hintedFoods; - } } diff --git a/src/main/java/com/example/slimfitbackend/payload/SendMessageRequest.java b/src/main/java/com/example/slimfitbackend/payload/SendMessageRequest.java index a8b70f8..470db91 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SendMessageRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SendMessageRequest.java @@ -1,17 +1,12 @@ package com.example.slimfitbackend.payload; -import java.util.Date; +import lombok.Getter; +import lombok.Setter; +@Setter +@Getter public class SendMessageRequest { private String message; - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - } diff --git a/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java index 4a4ef0e..4a0e593 100644 --- a/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/UserWeightResponse.java @@ -1,5 +1,6 @@ package com.example.slimfitbackend.payload; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; @@ -7,6 +8,7 @@ @Setter @Getter +@AllArgsConstructor public class UserWeightResponse { private double weight; @@ -17,9 +19,4 @@ public UserWeightResponse(double weight) { this.weight = weight; } - public UserWeightResponse(double weight, Date date) { - this.weight = weight; - this.date = date; - } - } diff --git a/src/test/java/com/example/slimfitbackend/service/MessageServiceTest.java b/src/test/java/com/example/slimfitbackend/service/MessageServiceTest.java new file mode 100644 index 0000000..7848887 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/MessageServiceTest.java @@ -0,0 +1,122 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.Message; +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.payload.MessageResponse; +import com.example.slimfitbackend.payload.SendMessageRequest; +import com.example.slimfitbackend.payload.common.MapStructMapper; +import com.example.slimfitbackend.repository.MessageRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +public class MessageServiceTest { + + @Mock + private MessageRepository messageRepository; + + @Mock + private MapStructMapper mapStructMapper; + + @Mock + private UserService userService; + + @InjectMocks + private MessageService messageService; + + @BeforeEach + public void setup() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void testGetAllMessageResponse() { + // Mocking data + Message message1 = new Message(); + message1.setId(1L); + message1.setMessage("Test message 1"); + User user1 = new User(); + user1.setUserId(1L); + user1.setFirstName("John"); + message1.setUser(user1); + + MessageResponse messageResponse1 = new MessageResponse(); + messageResponse1.setId(1L); + messageResponse1.setMessage("Test message 1"); + messageResponse1.setUsername("John"); + + List messages = new ArrayList<>(); + messages.add(message1); + + List expectedResponse = new ArrayList<>(); + expectedResponse.add(messageResponse1); + + // Mocking repository behavior + when(messageRepository.findAll()).thenReturn(messages); + when(mapStructMapper.messageToMessageResponse(message1)).thenReturn(messageResponse1); + + // Calling the service method + List actualResponse = messageService.getAllMessageResponse(); + + // Verifying the result + assertEquals(expectedResponse.size(), actualResponse.size()); + assertEquals(expectedResponse.get(0).getId(), actualResponse.get(0).getId()); + assertEquals(expectedResponse.get(0).getMessage(), actualResponse.get(0).getMessage()); + assertEquals(expectedResponse.get(0).getUsername(), actualResponse.get(0).getUsername()); + + // Verifying interactions with mocks + verify(messageRepository, times(1)).findAll(); + verify(mapStructMapper, times(1)).messageToMessageResponse(message1); + } + + @Test + public void testSendMessage() throws Exception { + // Mocking data + SendMessageRequest request = new SendMessageRequest(); + request.setMessage("Test message"); + + User user = new User(); + user.setUserId(1L); + user.setFirstName("John"); + + Message message = new Message(); + message.setId(1L); + message.setMessage("Test message"); + message.setUser(user); + message.setDate(new Date()); + + MessageResponse expectedResponse = new MessageResponse(); + expectedResponse.setId(1L); + expectedResponse.setMessage("Test message"); + expectedResponse.setUsername("John"); + + // Mocking getCurrentUser() method of UserService + when(userService.getCurrentUser()).thenReturn(user); + + // Mocking repository behavior + when(messageRepository.save(any(Message.class))).thenReturn(message); + when(mapStructMapper.messageToMessageResponse(message)).thenReturn(expectedResponse); + + // Calling the service method + MessageResponse actualResponse = messageService.sendMessage(request); + + // Verifying the result + assertEquals(expectedResponse.getId(), actualResponse.getId()); + assertEquals(expectedResponse.getMessage(), actualResponse.getMessage()); + assertEquals(expectedResponse.getUsername(), actualResponse.getUsername()); + + // Verifying interactions with mocks + verify(userService, times(1)).getCurrentUser(); + verify(messageRepository, times(1)).save(any(Message.class)); + verify(mapStructMapper, times(1)).messageToMessageResponse(message); + } +} From a1030588d28913bd17467eaa34a88826be285e32 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Tue, 30 Apr 2024 10:34:24 +0100 Subject: [PATCH 06/16] emg --- .../payload/AuthenticationRequest.java | 7 +- .../payload/FoodCalResponse.java | 1 + .../payload/RegisterRequest.java | 1 + .../service/ProgressService.java | 3 + .../service/AuthenticationServiceTest.java | 71 +++++++++++++++++++ 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/example/slimfitbackend/service/AuthenticationServiceTest.java diff --git a/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java b/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java index 9314c65..3bd0e8f 100644 --- a/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/AuthenticationRequest.java @@ -1,17 +1,16 @@ package com.example.slimfitbackend.payload; -import lombok.Builder; -import lombok.Data; -import lombok.Getter; -import lombok.Setter; +import lombok.*; @Setter @Getter @Builder +@AllArgsConstructor public class AuthenticationRequest { String email; + String password; } diff --git a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java index 3da9b09..9c315af 100644 --- a/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/FoodCalResponse.java @@ -10,6 +10,7 @@ public class FoodCalResponse { private String foodName; + private double cal; } diff --git a/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java b/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java index 658e3ee..13995d6 100644 --- a/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/RegisterRequest.java @@ -6,6 +6,7 @@ @Setter @Getter @Builder +@AllArgsConstructor public class RegisterRequest { private String firstname; diff --git a/src/main/java/com/example/slimfitbackend/service/ProgressService.java b/src/main/java/com/example/slimfitbackend/service/ProgressService.java index 6ea5d5c..a53db2c 100644 --- a/src/main/java/com/example/slimfitbackend/service/ProgressService.java +++ b/src/main/java/com/example/slimfitbackend/service/ProgressService.java @@ -30,6 +30,9 @@ public List getActualWeightProgress() throws Exception { for (WeightProgress weightProgress : weightProgresses) { userWeightResponses.add(new UserWeightResponse(weightProgress.getWeight(), weightProgress.getDate())); } + if(userWeightResponses.size()>5){ + return userWeightResponses.subList(userWeightResponses.size() - 5, userWeightResponses.size()); + } return userWeightResponses; } diff --git a/src/test/java/com/example/slimfitbackend/service/AuthenticationServiceTest.java b/src/test/java/com/example/slimfitbackend/service/AuthenticationServiceTest.java new file mode 100644 index 0000000..df01759 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/AuthenticationServiceTest.java @@ -0,0 +1,71 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.payload.AuthenticationRequest; +import com.example.slimfitbackend.payload.AuthenticationResponse; +import com.example.slimfitbackend.payload.RegisterRequest; +import com.example.slimfitbackend.repository.UserRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.security.authentication.AuthenticationManager; +import org.springframework.security.crypto.password.PasswordEncoder; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +public class AuthenticationServiceTest { + + @Mock + private UserRepository userRepository; + + @Mock + private JwtService jwtService; + + @Mock + private AuthenticationManager authenticationManager; + + @Mock + private PasswordEncoder passwordEncoder; + + @InjectMocks + private AuthenticationService authenticationService; + + @BeforeEach + public void setUp() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void testRegister() { + RegisterRequest request = new RegisterRequest("test@example.com", "John", "Doe", "password"); + User user = new User(request.getEmail(), request.getFirstname(), request.getLastname(), "encoded_password"); + + when(passwordEncoder.encode("password")).thenReturn("encoded_password"); + when(userRepository.save(any(User.class))).thenReturn(user); + when(jwtService.generateToken(any(User.class))).thenReturn("jwt_token"); + + AuthenticationResponse response = authenticationService.register(request); + + assertEquals("jwt_token", response.getToken()); + verify(userRepository, times(1)).save(any(User.class)); + } + + @Test + public void testAuthenticate() { + AuthenticationRequest request = new AuthenticationRequest("test@example.com", "password"); + User user = new User("test@example.com", "John", "Doe", "encoded_password"); + + when(userRepository.findByEmail("test@example.com")).thenReturn(Optional.of(user)); + when(jwtService.generateToken(any(User.class))).thenReturn("jwt_token"); + + AuthenticationResponse response = authenticationService.authenticate(request); + + assertEquals("jwt_token", response.getToken()); + verify(authenticationManager, times(1)).authenticate(any()); + } +} From ffefb5cf146655422499770204d5ea58562b7890 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Wed, 1 May 2024 14:57:56 +0100 Subject: [PATCH 07/16] Formatting and some testing --- pom.xml | 8 -- .../config/SecurityConfiguration.java | 14 +- .../security/JwtAuthFilter.java | 1 + .../service/DailyCalorieService.java | 4 - .../service/IntakeRecordService.java | 74 +++++----- .../service/MLModelService.java | 2 +- .../service/DailyCalorieServiceTest.java | 81 +++++++++++ .../service/UserServiceTest.java | 127 ++++++++++++++++++ 8 files changed, 251 insertions(+), 60 deletions(-) create mode 100644 src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java create mode 100644 src/test/java/com/example/slimfitbackend/service/UserServiceTest.java diff --git a/pom.xml b/pom.xml index 4324304..31feab0 100644 --- a/pom.xml +++ b/pom.xml @@ -45,14 +45,6 @@ org.projectlombok lombok - - org.springframework.boot - spring-boot-starter-data-jpa - - - org.springframework.boot - spring-boot-starter-data-jpa - org.pmml4s pmml4s_3 diff --git a/src/main/java/com/example/slimfitbackend/config/SecurityConfiguration.java b/src/main/java/com/example/slimfitbackend/config/SecurityConfiguration.java index 0ec0eba..e648d38 100644 --- a/src/main/java/com/example/slimfitbackend/config/SecurityConfiguration.java +++ b/src/main/java/com/example/slimfitbackend/config/SecurityConfiguration.java @@ -22,19 +22,9 @@ @RequiredArgsConstructor public class SecurityConfiguration { - private static final String[] WHITE_LIST_URL = {"/api/v1/auth/**", - "/v2/api-docs", - "/v3/api-docs", - "/v3/api-docs/**", - "/swagger-resources", - "/swagger-resources/**", - "/configuration/ui", - "/configuration/security", - "/swagger-ui/**", - "/webjars/**", - "/swagger-ui.html"}; @Autowired private JwtAuthFilter jwtAuthFilter; + @Autowired private AuthenticationProvider authenticationProvider; @@ -53,7 +43,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .sessionCreationPolicy(STATELESS) .and() .authenticationProvider(authenticationProvider) - .addFilterBefore(jwtAuthFilter,UsernamePasswordAuthenticationFilter.class); + .addFilterBefore(jwtAuthFilter, UsernamePasswordAuthenticationFilter.class); return http.build(); } } diff --git a/src/main/java/com/example/slimfitbackend/security/JwtAuthFilter.java b/src/main/java/com/example/slimfitbackend/security/JwtAuthFilter.java index e132c1d..5fb966d 100644 --- a/src/main/java/com/example/slimfitbackend/security/JwtAuthFilter.java +++ b/src/main/java/com/example/slimfitbackend/security/JwtAuthFilter.java @@ -26,6 +26,7 @@ public class JwtAuthFilter extends OncePerRequestFilter { @Autowired private UserDetailsService userDetailsService; + @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { final String authHeader = request.getHeader("Authorization"); diff --git a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java index bb86173..26a7b73 100644 --- a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java +++ b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java @@ -26,10 +26,6 @@ public class DailyCalorieService { private int calorieDeficitPerToday(int weightLossPerWeekInG) { - if (weightLossPerWeekInG > 500) { - // throw exception not recommended - } - double weightLossPerWeekInKG = (double) weightLossPerWeekInG / 1000; int oneKGFat = 7700; diff --git a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java index 12af431..0227433 100644 --- a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java +++ b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java @@ -6,7 +6,6 @@ import com.example.slimfitbackend.payload.*; import com.example.slimfitbackend.payload.common.MapStructMapper; import com.example.slimfitbackend.repository.IntakeRecordRepository; -import com.fasterxml.jackson.core.JsonProcessingException; import org.json.JSONArray; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; @@ -32,48 +31,53 @@ public class IntakeRecordService { @Autowired private IntakeRecordRepository intakeRecordRepository; - public SearchFoodCalResponse getCalorieForFood(SearchFoodCalRequest searchFoodCalRequest) throws JsonProcessingException { - String apiUrl = "https://api.edamam.com/api/food-database/parser?nutrition-type=logging&app_id=07d50733&app_key=80fcb49b500737827a9a23f7049653b9&ingr=" + searchFoodCalRequest.getFoodName(); - RestTemplate restTemplate = new RestTemplate(); - ResponseEntity response = restTemplate.getForEntity(apiUrl, String.class); - JSONObject json = new JSONObject(response); - Object json1 = json.get("body"); - JSONObject body = new JSONObject(json1.toString()); - Object parsed = body.get("parsed"); - JSONArray jsonArray = new JSONArray(parsed.toString()); - - SearchFoodCalResponse searchFoodCalResponse = new SearchFoodCalResponse(); + public SearchFoodCalResponse getCalorieForFood(SearchFoodCalRequest searchFoodCalRequest) { try{ - JSONObject jsonObject = jsonArray.getJSONObject(0); - JSONObject foodObject = jsonObject.getJSONObject("food"); - JSONObject nutrientsObject = foodObject.getJSONObject("nutrients"); - String name = foodObject.getString("label"); - double enercKcal = nutrientsObject.getDouble("ENERC_KCAL"); - searchFoodCalResponse.setMatchFood(new FoodCalResponse(name,enercKcal)); - }catch (Exception ignored){ - searchFoodCalResponse.setMatchFood(null); - } + String apiUrl = "https://api.edamam.com/api/food-database/parser?nutrition-type=logging&app_id=07d50733&app_key=80fcb49b500737827a9a23f7049653b9&ingr=" + searchFoodCalRequest.getFoodName(); + RestTemplate restTemplate = new RestTemplate(); + ResponseEntity response = restTemplate.getForEntity(apiUrl, String.class); + JSONObject json = new JSONObject(response); + Object json1 = json.get("body"); + JSONObject body = new JSONObject(json1.toString()); + Object parsed = body.get("parsed"); + JSONArray jsonArray = new JSONArray(parsed.toString()); + + SearchFoodCalResponse searchFoodCalResponse = new SearchFoodCalResponse(); + try { + JSONObject jsonObject = jsonArray.getJSONObject(0); + JSONObject foodObject = jsonObject.getJSONObject("food"); + JSONObject nutrientsObject = foodObject.getJSONObject("nutrients"); + String name = foodObject.getString("label"); + double enercKcal = nutrientsObject.getDouble("ENERC_KCAL"); + searchFoodCalResponse.setMatchFood(new FoodCalResponse(name, enercKcal)); + } catch (Exception ignored) { + searchFoodCalResponse.setMatchFood(null); + } - Object hints = body.get("hints"); - JSONArray hintsJsonArray = new JSONArray(hints.toString()); + Object hints = body.get("hints"); + JSONArray hintsJsonArray = new JSONArray(hints.toString()); - ArrayList foodCalResponses = new ArrayList<>(); + ArrayList foodCalResponses = new ArrayList<>(); - for (int i = 0; i < hintsJsonArray.length(); i++) { - JSONObject hintJsonObject = hintsJsonArray.getJSONObject(0); - JSONObject hintFoodObject = hintJsonObject.getJSONObject("food"); - JSONObject hintNutrientsObject = hintFoodObject.getJSONObject("nutrients"); - String foodLabel = hintFoodObject.getString("label"); - if(!doesFoodAlreadyExist(foodCalResponses,foodLabel)) - foodCalResponses.add(new FoodCalResponse(foodLabel, hintNutrientsObject.getDouble("ENERC_KCAL"))); + for (int i = 0; i < hintsJsonArray.length(); i++) { + JSONObject hintJsonObject = hintsJsonArray.getJSONObject(0); + JSONObject hintFoodObject = hintJsonObject.getJSONObject("food"); + JSONObject hintNutrientsObject = hintFoodObject.getJSONObject("nutrients"); + String foodLabel = hintFoodObject.getString("label"); + if (!doesFoodAlreadyExist(foodCalResponses, foodLabel)) + foodCalResponses.add(new FoodCalResponse(foodLabel, hintNutrientsObject.getDouble("ENERC_KCAL"))); + } + searchFoodCalResponse.setHintedFoods(foodCalResponses); + return searchFoodCalResponse; + }catch (Exception e){ + e.printStackTrace(); } - searchFoodCalResponse.setHintedFoods(foodCalResponses); - return searchFoodCalResponse; + return new SearchFoodCalResponse(); } - private boolean doesFoodAlreadyExist(ArrayList foodCalResponses,String name){ + private boolean doesFoodAlreadyExist(ArrayList foodCalResponses, String name) { for (FoodCalResponse foodCalResponse : foodCalResponses) { - if(Objects.equals(foodCalResponse.getFoodName(), name)) + if (Objects.equals(foodCalResponse.getFoodName(), name)) return true; } return false; diff --git a/src/main/java/com/example/slimfitbackend/service/MLModelService.java b/src/main/java/com/example/slimfitbackend/service/MLModelService.java index bf93965..ced34bb 100644 --- a/src/main/java/com/example/slimfitbackend/service/MLModelService.java +++ b/src/main/java/com/example/slimfitbackend/service/MLModelService.java @@ -22,7 +22,7 @@ private static Object getRegressionValue(Map values) { public static double getCalorie(double gender, double age, double height, double weight, double duration, double exercise_type_num, double intensity) { Map values = new HashMap<>(); - values.put("Gender",gender); + values.put("Gender", gender); values.put("Age", age); values.put("Height", height); values.put("Weight", weight); diff --git a/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java b/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java new file mode 100644 index 0000000..5cb4778 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java @@ -0,0 +1,81 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.DailyCalorie; +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.payload.DailyCalorieResponseDto; +import com.example.slimfitbackend.payload.GetDailyCalorieDto; +import com.example.slimfitbackend.payload.common.MapStructMapper; +import com.example.slimfitbackend.repository.DailyCalorieRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Date; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +class DailyCalorieServiceTest { + + @Mock + private DailyCalorieRepository dailyCalorieRepository; + + @Mock + private UserService userService; + + @Mock + private MapStructMapper mapStructMapper; + + @InjectMocks + private DailyCalorieService dailyCalorieService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testGetDailyCalorieResponse() throws Exception { + // Given + GetDailyCalorieDto getDailyCalorieDto = new GetDailyCalorieDto(); + getDailyCalorieDto.setDate(new Date()); + + User user = new User(); + user.setWeeklyWeightLossGoal(500); // Assuming 500 grams per week + user.setDailyActivityGoal(2000); // Assuming daily activity goal + user.setBmr(1800); // Assuming Basal Metabolic Rate + + DailyCalorie dailyCalorie = new DailyCalorie(); + dailyCalorie.setUser(user); + dailyCalorie.setDate(new Date()); + // Assuming some values for actual and goal calories + dailyCalorie.setDailyGoal(1800); + dailyCalorie.setDailyActual(1600); + dailyCalorie.setDailyActivityGoal(2000); + dailyCalorie.setDailyActivityActual(1800); + dailyCalorie.setBreakfastGoal(400); + dailyCalorie.setBreakfastActual(300); + dailyCalorie.setLunchGoal(600); + dailyCalorie.setLunchActual(500); + dailyCalorie.setDinnerGoal(600); + dailyCalorie.setDinnerActual(500); + dailyCalorie.setSnackGoal(200); + dailyCalorie.setSnackActual(100); + + when(userService.getCurrentUser()).thenReturn(user); + when(dailyCalorieRepository.findByDateAndUser(any(Date.class), any(User.class))).thenReturn(Optional.of(dailyCalorie)); + DailyCalorieResponseDto returnObj = new DailyCalorieResponseDto(); + returnObj.setDailyActual(dailyCalorie.getDailyActual()); + when(mapStructMapper.dailyCalorietoDailyCalorieResponseDto(any(DailyCalorie.class))).thenReturn(returnObj); + + // When + DailyCalorieResponseDto result = dailyCalorieService.getDailyCalorieResponse(getDailyCalorieDto); + + // Then + assertEquals(dailyCalorie.getDailyActual(), result.getDailyActual()); + } +} diff --git a/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java new file mode 100644 index 0000000..8c6df92 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java @@ -0,0 +1,127 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.WeightProgress; +import com.example.slimfitbackend.payload.GetUserResponse; +import com.example.slimfitbackend.payload.SaveUserWeightRequest; +import com.example.slimfitbackend.payload.UserWeightResponse; +import com.example.slimfitbackend.payload.SaveUserRequest; +import com.example.slimfitbackend.payload.common.MapStructMapper; +import com.example.slimfitbackend.repository.UserRepository; +import com.example.slimfitbackend.repository.WeightProgressRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.security.core.Authentication; +import org.springframework.security.core.context.SecurityContext; +import org.springframework.security.core.context.SecurityContextHolder; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.when; + +class UserServiceTest { + + @Mock + private MapStructMapper mapStructMapper; + + @Mock + private UserRepository userRepository; + + @Mock + private WeightProgressRepository weightProgressRepository; + + @InjectMocks + private UserService userService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void testCreateNewUser() { + // Given + SaveUserRequest saveUserRequest = new SaveUserRequest(); + saveUserRequest.setDateOfBirth(new Date()); + saveUserRequest.setHeight(170); + saveUserRequest.setWeight(70); + saveUserRequest.setGender(1); + saveUserRequest.setWeeklyWeightLossGoal(500); + saveUserRequest.setDailyActivityGoal(500); + + User user = new User(); + user.setEmail("test@example.com"); + + when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + + // When + boolean result = userService.createNewUser(saveUserRequest); + + // Then + assertEquals(true, result); + } + + @Test + void testGetUser() throws Exception { + // Given + User user = new User(); + user.setEmail("test@example.com"); + + when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + when(mapStructMapper.userToGetUserResponse(any(User.class))).thenReturn(new GetUserResponse()); + + // When + GetUserResponse result = userService.getUser(); + + // Then + assertEquals(new GetUserResponse(), result); + } + + @Test + void testGetUserWeight() throws Exception { + // Given + User user = new User(); + user.setEmail("test@example.com"); + + List weightProgressList = new ArrayList<>(); + WeightProgress weightProgress = new WeightProgress(); + weightProgress.setWeight(70); + weightProgressList.add(weightProgress); + + when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + when(weightProgressRepository.findAllByUserOrderByDate(any(User.class))).thenReturn(weightProgressList); + + // When + UserWeightResponse result = userService.getUserWeight(); + + // Then + assertEquals(70, result.getWeight()); + } + + @Test + void testSaveUserWeight() throws Exception { + // Given + SaveUserWeightRequest saveUserWeightRequest = new SaveUserWeightRequest(); + saveUserWeightRequest.setWeight(70); + + User user = new User(); + user.setEmail("test@example.com"); + + when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + + // When + UserWeightResponse result = userService.saveUserWeight(saveUserWeightRequest); + + // Then + assertEquals(70, result.getWeight()); + } +} From 171b6e75e8cb69b29d945b611c28984c5f03184a Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Wed, 1 May 2024 19:01:34 +0100 Subject: [PATCH 08/16] custom exceptions --- .../controller/AuthenticationController.java | 9 +- .../controller/UserActivityController.java | 4 +- .../controller/UserController.java | 4 +- .../exceptions/CustomException.java | 20 +++ .../exceptions/GlobalExceptionHandler.java | 15 ++ .../example/slimfitbackend/model/User.java | 131 +----------------- .../service/AuthenticationService.java | 7 + .../service/UserActivityService.java | 10 +- .../slimfitbackend/service/UserService.java | 9 +- src/main/resources/application.properties | 1 + 10 files changed, 63 insertions(+), 147 deletions(-) create mode 100644 src/main/java/com/example/slimfitbackend/exceptions/CustomException.java create mode 100644 src/main/java/com/example/slimfitbackend/exceptions/GlobalExceptionHandler.java diff --git a/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java b/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java index 3920d3d..5e69fde 100644 --- a/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java +++ b/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java @@ -22,15 +22,12 @@ public class AuthenticationController { private AuthenticationService service; @PostMapping("/register") - public ResponseEntity register( - @RequestBody RegisterRequest request - ) { + public ResponseEntity register(@RequestBody RegisterRequest request) { return ResponseEntity.ok(service.register(request)); } + @PostMapping("/authenticate") - public ResponseEntity authenticate( - @RequestBody AuthenticationRequest request - ) { + public ResponseEntity authenticate(@RequestBody AuthenticationRequest request) { return ResponseEntity.ok(service.authenticate(request)); } diff --git a/src/main/java/com/example/slimfitbackend/controller/UserActivityController.java b/src/main/java/com/example/slimfitbackend/controller/UserActivityController.java index d905a51..2b51e04 100644 --- a/src/main/java/com/example/slimfitbackend/controller/UserActivityController.java +++ b/src/main/java/com/example/slimfitbackend/controller/UserActivityController.java @@ -20,12 +20,12 @@ public class UserActivityController { private UserActivityService userActivityService; @PostMapping("/newActivity") - public NewActivityResponse addNewActivity(@RequestBody NewActivityRequest newActivityRequest) throws Exception { + public NewActivityResponse addNewActivity(@RequestBody NewActivityRequest newActivityRequest) { return userActivityService.addNewActivity(newActivityRequest); } @GetMapping("/calorie") - public PredictCalorieResponse getPredictedCal(@Valid PredictCalorieRequest predictCalorieRequest) throws Exception { + public PredictCalorieResponse getPredictedCal(@Valid PredictCalorieRequest predictCalorieRequest) { return userActivityService.getPredictedCalForAct(predictCalorieRequest); } diff --git a/src/main/java/com/example/slimfitbackend/controller/UserController.java b/src/main/java/com/example/slimfitbackend/controller/UserController.java index 9ddbfdb..e7b50df 100644 --- a/src/main/java/com/example/slimfitbackend/controller/UserController.java +++ b/src/main/java/com/example/slimfitbackend/controller/UserController.java @@ -22,12 +22,12 @@ public boolean createNewUser(@RequestBody SaveUserRequest saveUserRequest) { } @GetMapping("") - private GetUserResponse getUser() throws Exception { + private GetUserResponse getUser() { return userService.getUser(); } @GetMapping("/weight") - private UserWeightResponse getUserWeight() throws Exception { + private UserWeightResponse getUserWeight() { return userService.getUserWeight(); } diff --git a/src/main/java/com/example/slimfitbackend/exceptions/CustomException.java b/src/main/java/com/example/slimfitbackend/exceptions/CustomException.java new file mode 100644 index 0000000..03f2b35 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/exceptions/CustomException.java @@ -0,0 +1,20 @@ +package com.example.slimfitbackend.exceptions; + +public class CustomException extends RuntimeException { + + public CustomException() { + super(); + } + + public CustomException(String message) { + super(message); + } + + public CustomException(String message, Throwable cause) { + super(message, cause); + } + + public CustomException(Throwable cause) { + super(cause); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/slimfitbackend/exceptions/GlobalExceptionHandler.java b/src/main/java/com/example/slimfitbackend/exceptions/GlobalExceptionHandler.java new file mode 100644 index 0000000..111c131 --- /dev/null +++ b/src/main/java/com/example/slimfitbackend/exceptions/GlobalExceptionHandler.java @@ -0,0 +1,15 @@ +package com.example.slimfitbackend.exceptions; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; + +@ControllerAdvice +public class GlobalExceptionHandler { + + @ExceptionHandler(CustomException.class) + public ResponseEntity handleException(Exception e) { + return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST); + } +} \ No newline at end of file diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index a690bd2..5e097d1 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -12,6 +12,8 @@ import java.util.Date; import java.util.List; +@Getter +@Setter @Entity @EnableAutoConfiguration @Table(name = "\"user\"") @@ -21,6 +23,7 @@ public class User implements UserDetails { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; + @Column(unique=true) private String email; private String firstName; @@ -90,110 +93,6 @@ public User(Long userId, String email, String firstName, String lastName, int ag this.weightProgresses = weightProgresses; } - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public int getAge() { - return age; - } - - public void setAge(int age) { - this.age = age; - } - - public Date getDateOfBirth() { - return dateOfBirth; - } - - public void setDateOfBirth(Date dateOfBirth) { - this.dateOfBirth = dateOfBirth; - } - - public double getHeight() { - return height; - } - - public void setHeight(double height) { - this.height = height; - } - - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { - this.weight = weight; - } - - public int getGender() { - return gender; - } - - public void setGender(int gender) { - this.gender = gender; - } - - public double getBmr() { - return bmr; - } - - public void setBmr(double bmr) { - this.bmr = bmr; - } - - public int getWeeklyWeightLossGoal() { - return weeklyWeightLossGoal; - } - - public void setWeeklyWeightLossGoal(int weeklyWeightLossGoal) { - this.weeklyWeightLossGoal = weeklyWeightLossGoal; - } - - public List getUserActivities() { - return userActivities; - } - - public void setUserActivities(List userActivities) { - this.userActivities = userActivities; - } - - public List getWeightProgresses() { - return weightProgresses; - } - - public void setWeightProgresses(List weightProgresses) { - this.weightProgresses = weightProgresses; - } - - public int getDailyActivityGoal() { - return dailyActivityGoal; - } - - public void setDailyActivityGoal(int dailyActivityGoal) { - this.dailyActivityGoal = dailyActivityGoal; - } - @Override public Collection getAuthorities() { return List.of(new SimpleGrantedAuthority(Role.User.name())); @@ -228,28 +127,4 @@ public boolean isCredentialsNonExpired() { public boolean isEnabled() { return true; } - - public Date getStartDate() { - return startDate; - } - - public void setStartDate(Date startDate) { - this.startDate = startDate; - } - - public double getStartWeight() { - return startWeight; - } - - public void setStartWeight(double startWeight) { - this.startWeight = startWeight; - } - - public Long getUserId() { - return userId; - } - - public void setUserId(Long userId) { - this.userId = userId; - } } diff --git a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java index f47f27b..8c306f8 100644 --- a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java +++ b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java @@ -1,5 +1,6 @@ package com.example.slimfitbackend.service; +import com.example.slimfitbackend.exceptions.CustomException; import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.payload.AuthenticationRequest; import com.example.slimfitbackend.payload.AuthenticationResponse; @@ -12,6 +13,8 @@ import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import java.util.Optional; + @Service @RequiredArgsConstructor public class AuthenticationService { @@ -31,6 +34,10 @@ public class AuthenticationService { public AuthenticationResponse register(RegisterRequest request) { var user = new User(request.getEmail(), request.getFirstname(), request.getLastname(), passwordEncoder.encode(request.getPassword())); + Optional optUser = userRepository.findByEmail(request.getEmail()); + if(optUser.isPresent()){ + throw new CustomException("User already exist"); + } userRepository.save(user); var jwtToken = jwtService.generateToken(user); return new AuthenticationResponse(jwtToken); diff --git a/src/main/java/com/example/slimfitbackend/service/UserActivityService.java b/src/main/java/com/example/slimfitbackend/service/UserActivityService.java index 6faa4ae..5bb90fd 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserActivityService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserActivityService.java @@ -42,7 +42,7 @@ public class UserActivityService { private MapStructMapper mapStructMapper; - public NewActivityResponse addNewActivity(NewActivityRequest newActivityRequest) throws Exception { + public NewActivityResponse addNewActivity(NewActivityRequest newActivityRequest) { UserActivity userActivity = new UserActivity(); User user = userService.getCurrentUser(); userActivity.setUser(user); @@ -54,7 +54,7 @@ public NewActivityResponse addNewActivity(NewActivityRequest newActivityRequest) activityType.ifPresent(userActivity::setActivityType); userActivityRepository.save(userActivity); - DailyCalorie daily = dailyCalorieService.getDailyCalorie(user,newActivityRequest.getDate()); + DailyCalorie daily = dailyCalorieService.getDailyCalorie(user, newActivityRequest.getDate()); daily.setDailyActivityActual(daily.getDailyActivityActual() + newActivityRequest.getCalorie()); daily.setDailyActual(daily.getDailyActual() + newActivityRequest.getCalorie()); dailyCalorieRepository.save(daily); @@ -62,7 +62,7 @@ public NewActivityResponse addNewActivity(NewActivityRequest newActivityRequest) return mapStructMapper.userActivityToNewActivityResponse(userActivity); } - public PredictCalorieResponse getPredictedCalForAct(PredictCalorieRequest predictCalorieRequest) throws Exception { + public PredictCalorieResponse getPredictedCalForAct(PredictCalorieRequest predictCalorieRequest) { User user = userService.getCurrentUser(); double results = MLModelService.getCalorie(user.getGender(), user.getAge(), user.getHeight(), user.getWeight(), predictCalorieRequest.getDuration(), predictCalorieRequest.getActId(), predictCalorieRequest.getIntensity()); PredictCalorieResponse predictCalorieResponse = new PredictCalorieResponse(); @@ -70,11 +70,11 @@ public PredictCalorieResponse getPredictedCalForAct(PredictCalorieRequest predic return predictCalorieResponse; } - public List getActivities(){ + public List getActivities() { List activities = activityTypeRepository.findAll(); List getActivitiesResponseList = new ArrayList<>(); for (ActivityType activity : activities) { - getActivitiesResponseList.add(new GetActivitiesResponse(activity.getName(),activity.getActId())); + getActivitiesResponseList.add(new GetActivitiesResponse(activity.getName(), activity.getActId())); } return getActivitiesResponseList; } diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index fcfbe83..c719d6f 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -1,5 +1,6 @@ package com.example.slimfitbackend.service; +import com.example.slimfitbackend.exceptions.CustomException; import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.model.WeightProgress; import com.example.slimfitbackend.payload.GetUserResponse; @@ -62,23 +63,23 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { } } - public User getCurrentUser() throws Exception { + public User getCurrentUser() { String email = SecurityContextHolder.getContext().getAuthentication().getName(); Optional optUser = userRepository.findByEmail(email); if (optUser.isPresent()) { return optUser.get(); } else { - throw new Exception(); + throw new CustomException("User do not exist"); } } - public GetUserResponse getUser() throws Exception { + public GetUserResponse getUser() { return mapStructMapper.userToGetUserResponse(getCurrentUser()); } - public UserWeightResponse getUserWeight() throws Exception { + public UserWeightResponse getUserWeight() { User user = getCurrentUser(); List userWeightLogs = weightProgressRepository.findAllByUserOrderByDate(user); System.out.println(userWeightLogs); diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index b057688..ee6b8b2 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -2,5 +2,6 @@ spring.datasource.url=jdbc:mysql://localhost:3306/slimfit spring.datasource.username=root spring.datasource.password=root spring.jpa.hibernate.ddl-auto=update +logging.level.root=DEBUG From 8e0d68d3aa180e381ebc5f9da18218f92cf4ab58 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Thu, 2 May 2024 02:21:40 +0100 Subject: [PATCH 09/16] small fixes --- .../controller/UserController.java | 2 +- .../example/slimfitbackend/model/User.java | 2 + .../payload/DailyCalorieResponseDto.java | 5 +++ .../payload/SaveUserRequest.java | 2 + .../payload/common/MapStructMapper.java | 3 ++ .../repository/UserActivityRepository.java | 5 +++ .../service/AuthenticationService.java | 9 ++-- .../service/DailyCalorieService.java | 43 ++++++++++++++++++- .../slimfitbackend/service/UserService.java | 11 +++-- .../service/UserServiceTest.java | 7 +-- 10 files changed, 75 insertions(+), 14 deletions(-) diff --git a/src/main/java/com/example/slimfitbackend/controller/UserController.java b/src/main/java/com/example/slimfitbackend/controller/UserController.java index e7b50df..03b2a44 100644 --- a/src/main/java/com/example/slimfitbackend/controller/UserController.java +++ b/src/main/java/com/example/slimfitbackend/controller/UserController.java @@ -28,7 +28,7 @@ private GetUserResponse getUser() { @GetMapping("/weight") private UserWeightResponse getUserWeight() { - return userService.getUserWeight(); + return userService.getUserWeightResponse(); } @PostMapping("/weight") diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index 5e097d1..81799ae 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -52,6 +52,8 @@ public class User implements UserDetails { private double startWeight; + private double targetWeight; + @Enumerated(EnumType.STRING) private Role role; diff --git a/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java b/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java index ecf2425..906ccb0 100644 --- a/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java +++ b/src/main/java/com/example/slimfitbackend/payload/DailyCalorieResponseDto.java @@ -34,4 +34,9 @@ public class DailyCalorieResponseDto { private Date date; + private double currentWeight; + + private double targetWeight; + + private int totalActiveMinutes; } diff --git a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java index 4ff3047..0885455 100644 --- a/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java +++ b/src/main/java/com/example/slimfitbackend/payload/SaveUserRequest.java @@ -21,4 +21,6 @@ public class SaveUserRequest { private int dailyActivityGoal; + private double targetWeight; + } diff --git a/src/main/java/com/example/slimfitbackend/payload/common/MapStructMapper.java b/src/main/java/com/example/slimfitbackend/payload/common/MapStructMapper.java index 56de146..dfee531 100644 --- a/src/main/java/com/example/slimfitbackend/payload/common/MapStructMapper.java +++ b/src/main/java/com/example/slimfitbackend/payload/common/MapStructMapper.java @@ -10,6 +10,9 @@ @Mapper(componentModel = "spring") public interface MapStructMapper { + @Mapping(target = "currentWeight", ignore = true) + @Mapping(target = "targetWeight", ignore = true) + @Mapping(target = "totalActiveMinutes", ignore = true) DailyCalorieResponseDto dailyCalorietoDailyCalorieResponseDto(DailyCalorie dailyCalorie); User createUserRequestToUser(SaveUserRequest saveUserRequest); diff --git a/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java b/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java index 32773c7..04b3349 100644 --- a/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java +++ b/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java @@ -4,6 +4,11 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.Date; +import java.util.List; + @Repository public interface UserActivityRepository extends JpaRepository { + + List findAllByDateBetween(Date startDate, Date endDate); } diff --git a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java index 8c306f8..ba62754 100644 --- a/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java +++ b/src/main/java/com/example/slimfitbackend/service/AuthenticationService.java @@ -44,14 +44,17 @@ public AuthenticationResponse register(RegisterRequest request) { } public AuthenticationResponse authenticate(AuthenticationRequest request) { + Optional user = userRepository.findByEmail(request.getEmail()); + if(user.isEmpty()){ + throw new CustomException("Invalid email or password"); + } + authenticationManager.authenticate( new UsernamePasswordAuthenticationToken( request.getEmail(), request.getPassword() ) ); - User user = userRepository.findByEmail(request.getEmail()).orElseThrow(); - String token = jwtService.generateToken(user); - return new AuthenticationResponse(token); + return new AuthenticationResponse(jwtService.generateToken(user.get())); } } diff --git a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java index 26a7b73..185df3e 100644 --- a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java +++ b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java @@ -2,15 +2,19 @@ import com.example.slimfitbackend.model.DailyCalorie; import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.UserActivity; import com.example.slimfitbackend.payload.DailyCalorieResponseDto; import com.example.slimfitbackend.payload.GetDailyCalorieDto; import com.example.slimfitbackend.payload.common.MapStructMapper; import com.example.slimfitbackend.repository.DailyCalorieRepository; +import com.example.slimfitbackend.repository.UserActivityRepository; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; +import java.util.List; import java.util.Optional; +import java.util.Calendar; @Service public class DailyCalorieService { @@ -24,6 +28,9 @@ public class DailyCalorieService { @Autowired private MapStructMapper mapStructMapper; + @Autowired + private UserActivityRepository userActivityRepository; + private int calorieDeficitPerToday(int weightLossPerWeekInG) { double weightLossPerWeekInKG = (double) weightLossPerWeekInG / 1000; @@ -60,10 +67,42 @@ public DailyCalorieResponseDto getDailyCalorieResponse(GetDailyCalorieDto getDai if (optDailyCal.isEmpty()) { dailyCalorie = createNewDailyCalorie(user, getDailyCalorieDto.getDate()); dailyCalorieRepository.save(dailyCalorie); - return mapStructMapper.dailyCalorietoDailyCalorieResponseDto(dailyCalorie); + DailyCalorieResponseDto returnObject = mapStructMapper.dailyCalorietoDailyCalorieResponseDto(dailyCalorie); + returnObject.setCurrentWeight(userService.getUserWeight().getWeight()); + returnObject.setTargetWeight(user.getTargetWeight()); + returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate())); + return returnObject; } // get from db comparing date if not found create - return mapStructMapper.dailyCalorietoDailyCalorieResponseDto(optDailyCal.get()); + DailyCalorieResponseDto returnObject = mapStructMapper.dailyCalorietoDailyCalorieResponseDto(optDailyCal.get()); + returnObject.setCurrentWeight(userService.getUserWeight().getWeight()); + returnObject.setTargetWeight(user.getTargetWeight()); + returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate())); + return returnObject; + } + + public int getDailyActiveMinutes(Date currentDate){ + + // Set the time to midnight to represent the start of the day + Calendar calendar = Calendar.getInstance(); + calendar.setTime(currentDate); + calendar.set(Calendar.HOUR_OF_DAY, 0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.SECOND, 0); + Date startDate = calendar.getTime(); + + // Set the time to just before midnight to represent the end of the day + calendar.set(Calendar.HOUR_OF_DAY, 23); + calendar.set(Calendar.MINUTE, 59); + calendar.set(Calendar.SECOND, 59); + Date endDate = calendar.getTime(); + + List todayActivities = userActivityRepository.findAllByDateBetween(startDate,endDate); + int totalMinutes = 0; + for (UserActivity todayActivity : todayActivities) { + totalMinutes += (int) todayActivity.getDuration(); + } + return totalMinutes; } public DailyCalorie getDailyCalorie(User user, Date date) { diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index c719d6f..a7d8a30 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -45,6 +45,7 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { user.setStartWeight(saveUserRequest.getWeight()); user.setGender(saveUserRequest.getGender()); user.setStartDate(new Date()); + user.setTargetWeight(saveUserRequest.getWeight()); //1 == male 2 == female if (user.getGender() == 1) { @@ -79,11 +80,14 @@ public GetUserResponse getUser() { } - public UserWeightResponse getUserWeight() { + public UserWeightResponse getUserWeightResponse() { + return new UserWeightResponse(getUserWeight().getWeight()); + } + + public WeightProgress getUserWeight(){ User user = getCurrentUser(); List userWeightLogs = weightProgressRepository.findAllByUserOrderByDate(user); - System.out.println(userWeightLogs); - return new UserWeightResponse(userWeightLogs.get(userWeightLogs.size() - 1).getWeight()); + return userWeightLogs.get(userWeightLogs.size() - 1); } public UserWeightResponse saveUserWeight(SaveUserWeightRequest saveUserWeightRequest) throws Exception { @@ -94,4 +98,5 @@ public UserWeightResponse saveUserWeight(SaveUserWeightRequest saveUserWeightReq weightProgressRepository.save(weightProgress); return new UserWeightResponse(weightProgress.getWeight()); } + } \ No newline at end of file diff --git a/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java index 8c6df92..b909a8a 100644 --- a/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java +++ b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java @@ -14,9 +14,6 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import org.springframework.security.core.Authentication; -import org.springframework.security.core.context.SecurityContext; -import org.springframework.security.core.context.SecurityContextHolder; import java.util.ArrayList; import java.util.Date; @@ -87,7 +84,7 @@ void testGetUser() throws Exception { } @Test - void testGetUserWeight() throws Exception { + void testGetUserWeightResponse() throws Exception { // Given User user = new User(); user.setEmail("test@example.com"); @@ -101,7 +98,7 @@ void testGetUserWeight() throws Exception { when(weightProgressRepository.findAllByUserOrderByDate(any(User.class))).thenReturn(weightProgressList); // When - UserWeightResponse result = userService.getUserWeight(); + UserWeightResponse result = userService.getUserWeightResponse(); // Then assertEquals(70, result.getWeight()); From 3da25fdf7804e5ce582a66177c1f9d36213a9b75 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Thu, 2 May 2024 19:50:31 +0100 Subject: [PATCH 10/16] small fixes --- .../slimfitbackend/controller/AuthenticationController.java | 2 -- .../com/example/slimfitbackend/payload/GetUserResponse.java | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java b/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java index 5e69fde..a3808fe 100644 --- a/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java +++ b/src/main/java/com/example/slimfitbackend/controller/AuthenticationController.java @@ -5,8 +5,6 @@ import com.example.slimfitbackend.payload.AuthenticationResponse; import com.example.slimfitbackend.payload.RegisterRequest; import com.example.slimfitbackend.service.AuthenticationService; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; diff --git a/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java b/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java index cae0f8d..cb72c4a 100644 --- a/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java +++ b/src/main/java/com/example/slimfitbackend/payload/GetUserResponse.java @@ -33,4 +33,8 @@ public class GetUserResponse { private int dailyActivityGoal; + private double targetWeight; + + private Date startDate; + } From 4dea9934cee676a4deecf57d1c8080719eea6c0d Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Fri, 3 May 2024 16:09:20 +0100 Subject: [PATCH 11/16] unit tests --- .../slimfitbackend/model/WeightProgress.java | 32 +---- .../service/DailyCalorieService.java | 2 +- .../service/MyUserDetailsService.java | 2 +- .../slimfitbackend/service/UserService.java | 5 +- .../service/DailyCalorieServiceTest.java | 84 ++++++----- .../service/IntakeRecordServiceTest.java | 80 +++++++++++ .../service/MLModelServiceTest.java | 25 ++++ .../service/MyUserDetailsServiceTest.java | 58 ++++++++ .../service/ProgressServiceTest.java | 88 ++++++++++++ .../service/UserActivityServiceTest.java | 95 ++++++++++++ .../service/UserServiceTest.java | 135 ++++++++++++------ 11 files changed, 491 insertions(+), 115 deletions(-) create mode 100644 src/test/java/com/example/slimfitbackend/service/IntakeRecordServiceTest.java create mode 100644 src/test/java/com/example/slimfitbackend/service/MLModelServiceTest.java create mode 100644 src/test/java/com/example/slimfitbackend/service/MyUserDetailsServiceTest.java create mode 100644 src/test/java/com/example/slimfitbackend/service/ProgressServiceTest.java create mode 100644 src/test/java/com/example/slimfitbackend/service/UserActivityServiceTest.java diff --git a/src/main/java/com/example/slimfitbackend/model/WeightProgress.java b/src/main/java/com/example/slimfitbackend/model/WeightProgress.java index 1949530..eff6fbe 100644 --- a/src/main/java/com/example/slimfitbackend/model/WeightProgress.java +++ b/src/main/java/com/example/slimfitbackend/model/WeightProgress.java @@ -2,14 +2,17 @@ import jakarta.persistence.*; import lombok.Data; +import lombok.NoArgsConstructor; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import java.util.Date; + @Entity @Data @EnableAutoConfiguration @Table(name = "weight_progress") +@NoArgsConstructor public class WeightProgress { @Id @@ -24,35 +27,8 @@ public class WeightProgress { private Date date; - public Long getWeightProgressId() { - return weightProgressId; - } - - public void setWeightProgressId(Long weightProgressId) { - this.weightProgressId = weightProgressId; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { + public WeightProgress(User user, double weight) { this.user = user; - } - - public double getWeight() { - return weight; - } - - public void setWeight(double weight) { this.weight = weight; } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java index 185df3e..aafbd21 100644 --- a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java +++ b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java @@ -83,7 +83,7 @@ public DailyCalorieResponseDto getDailyCalorieResponse(GetDailyCalorieDto getDai public int getDailyActiveMinutes(Date currentDate){ - // Set the time to midnight to represent the start of the day + // Set the time to midnight represent the start of the day Calendar calendar = Calendar.getInstance(); calendar.setTime(currentDate); calendar.set(Calendar.HOUR_OF_DAY, 0); diff --git a/src/main/java/com/example/slimfitbackend/service/MyUserDetailsService.java b/src/main/java/com/example/slimfitbackend/service/MyUserDetailsService.java index 297547f..cd93834 100644 --- a/src/main/java/com/example/slimfitbackend/service/MyUserDetailsService.java +++ b/src/main/java/com/example/slimfitbackend/service/MyUserDetailsService.java @@ -24,6 +24,6 @@ public UserDetails loadUserByUsername(String username) throws UsernameNotFoundEx if (optionalUser.isPresent()){ return new org.springframework.security.core.userdetails.User(optionalUser.get().getEmail(),"foo",new ArrayList<>()); } - return null; + throw new UsernameNotFoundException("User not found"); } } diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index a7d8a30..416ef81 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -87,7 +87,10 @@ public UserWeightResponse getUserWeightResponse() { public WeightProgress getUserWeight(){ User user = getCurrentUser(); List userWeightLogs = weightProgressRepository.findAllByUserOrderByDate(user); - return userWeightLogs.get(userWeightLogs.size() - 1); + if(!userWeightLogs.isEmpty()){ + return userWeightLogs.get(userWeightLogs.size() - 1); + } + return new WeightProgress(user, user.getWeight()); } public UserWeightResponse saveUserWeight(SaveUserWeightRequest saveUserWeightRequest) throws Exception { diff --git a/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java b/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java index 5cb4778..ce559b4 100644 --- a/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java +++ b/src/test/java/com/example/slimfitbackend/service/DailyCalorieServiceTest.java @@ -2,22 +2,22 @@ import com.example.slimfitbackend.model.DailyCalorie; import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.WeightProgress; import com.example.slimfitbackend.payload.DailyCalorieResponseDto; import com.example.slimfitbackend.payload.GetDailyCalorieDto; import com.example.slimfitbackend.payload.common.MapStructMapper; import com.example.slimfitbackend.repository.DailyCalorieRepository; +import com.example.slimfitbackend.repository.UserActivityRepository; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import java.util.Date; -import java.util.Optional; +import java.util.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; class DailyCalorieServiceTest { @@ -30,52 +30,62 @@ class DailyCalorieServiceTest { @Mock private MapStructMapper mapStructMapper; + @Mock + private UserActivityRepository userActivityRepository; + @InjectMocks private DailyCalorieService dailyCalorieService; @BeforeEach void setUp() { - MockitoAnnotations.openMocks(this); + MockitoAnnotations.initMocks(this); } @Test void testGetDailyCalorieResponse() throws Exception { - // Given - GetDailyCalorieDto getDailyCalorieDto = new GetDailyCalorieDto(); - getDailyCalorieDto.setDate(new Date()); - + // Mocking user User user = new User(); - user.setWeeklyWeightLossGoal(500); // Assuming 500 grams per week - user.setDailyActivityGoal(2000); // Assuming daily activity goal - user.setBmr(1800); // Assuming Basal Metabolic Rate - - DailyCalorie dailyCalorie = new DailyCalorie(); - dailyCalorie.setUser(user); - dailyCalorie.setDate(new Date()); - // Assuming some values for actual and goal calories - dailyCalorie.setDailyGoal(1800); - dailyCalorie.setDailyActual(1600); - dailyCalorie.setDailyActivityGoal(2000); - dailyCalorie.setDailyActivityActual(1800); - dailyCalorie.setBreakfastGoal(400); - dailyCalorie.setBreakfastActual(300); - dailyCalorie.setLunchGoal(600); - dailyCalorie.setLunchActual(500); - dailyCalorie.setDinnerGoal(600); - dailyCalorie.setDinnerActual(500); - dailyCalorie.setSnackGoal(200); - dailyCalorie.setSnackActual(100); + user.setUserId(1L); + user.setBmr(2000); + user.setDailyActivityGoal(500); + user.setWeeklyWeightLossGoal(1000); + + // Mocking current date + Date currentDate = new Date(); + // Mocking user service to return current user when(userService.getCurrentUser()).thenReturn(user); - when(dailyCalorieRepository.findByDateAndUser(any(Date.class), any(User.class))).thenReturn(Optional.of(dailyCalorie)); - DailyCalorieResponseDto returnObj = new DailyCalorieResponseDto(); - returnObj.setDailyActual(dailyCalorie.getDailyActual()); - when(mapStructMapper.dailyCalorietoDailyCalorieResponseDto(any(DailyCalorie.class))).thenReturn(returnObj); - // When - DailyCalorieResponseDto result = dailyCalorieService.getDailyCalorieResponse(getDailyCalorieDto); + // Mocking daily calorie response DTO + DailyCalorieResponseDto mockedResponseDto = new DailyCalorieResponseDto(); + mockedResponseDto.setDailyGoal(1800); + mockedResponseDto.setCurrentWeight(70); + mockedResponseDto.setTargetWeight(65); + mockedResponseDto.setTotalActiveMinutes(60); + + WeightProgress weightProgress = new WeightProgress(); + weightProgress.setWeight(10.0); - // Then - assertEquals(dailyCalorie.getDailyActual(), result.getDailyActual()); + // Mocking daily calorie repository + when(dailyCalorieRepository.findByDateAndUser(any(Date.class), eq(user))).thenReturn(Optional.empty()); + DailyCalorie newDailyCalorie = new DailyCalorie(); + when(dailyCalorieRepository.save(any(DailyCalorie.class))).thenReturn(newDailyCalorie); + when(mapStructMapper.dailyCalorietoDailyCalorieResponseDto(any())).thenReturn(mockedResponseDto); + when(userService.getUserWeight()).thenReturn(weightProgress); + + // Test + GetDailyCalorieDto getDailyCalorieDto = new GetDailyCalorieDto(); + getDailyCalorieDto.setDate(currentDate); + DailyCalorieResponseDto responseDto = dailyCalorieService.getDailyCalorieResponse(getDailyCalorieDto); + + mockedResponseDto.setCurrentWeight(weightProgress.getWeight()); + mockedResponseDto.setTotalActiveMinutes(0); + + // Verify + assertEquals(mockedResponseDto, responseDto); + verify(userService, times(1)).getCurrentUser(); + verify(dailyCalorieRepository, times(1)).findByDateAndUser(any(Date.class), eq(user)); + verify(dailyCalorieRepository, times(1)).save(any(DailyCalorie.class)); } + } diff --git a/src/test/java/com/example/slimfitbackend/service/IntakeRecordServiceTest.java b/src/test/java/com/example/slimfitbackend/service/IntakeRecordServiceTest.java new file mode 100644 index 0000000..2d33fc8 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/IntakeRecordServiceTest.java @@ -0,0 +1,80 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.DailyCalorie; +import com.example.slimfitbackend.model.IntakeRecord; +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.payload.*; +import com.example.slimfitbackend.payload.common.MapStructMapper; +import com.example.slimfitbackend.repository.IntakeRecordRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.web.client.RestTemplate; + +import java.util.Date; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.*; + +class IntakeRecordServiceTest { + + @Mock + private DailyCalorieService dailyCalorieService; + + @Mock + private UserService userService; + + @Mock + private IntakeRecordRepository intakeRecordRepository; + + @Mock + private MapStructMapper mapStructMapper; + + @Mock + private RestTemplate restTemplate; + + @InjectMocks + private IntakeRecordService intakeRecordService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void saveNewIntakeRecord_Success() throws Exception { + IntakeRecordRequest request = new IntakeRecordRequest(); + request.setCalorieCount(200); + request.setMealName("Breakfast"); + request.setNote("Test note"); + request.setDate(new Date()); + request.setMeal(1); + + User user = new User(); // create a mock user + + DailyCalorie dailyCalorie = new DailyCalorie(); + dailyCalorie.setBreakfastActual(0); + dailyCalorie.setLunchActual(0); + dailyCalorie.setDinnerActual(0); + dailyCalorie.setSnackActual(0); + dailyCalorie.setDailyActual(0); + + when(userService.getCurrentUser()).thenReturn(user); + when(dailyCalorieService.getDailyCalorie(user, request.getDate())).thenReturn(dailyCalorie); + + IntakeRecord savedIntakeRecord = new IntakeRecord(); + + + when(intakeRecordRepository.save(any())).thenReturn(savedIntakeRecord); + IntakeRecordResponse expectedResponse = new IntakeRecordResponse(); + when(mapStructMapper.itakeRecordToIntakeRecordResponse(any())).thenReturn(expectedResponse); + + IntakeRecordResponse actualResponse = intakeRecordService.saveNewIntakeRecord(request); + + assertEquals(expectedResponse, actualResponse); + assertEquals(200, dailyCalorie.getBreakfastActual()); + assertEquals(200, dailyCalorie.getDailyActual()); + } +} diff --git a/src/test/java/com/example/slimfitbackend/service/MLModelServiceTest.java b/src/test/java/com/example/slimfitbackend/service/MLModelServiceTest.java new file mode 100644 index 0000000..97cc442 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/MLModelServiceTest.java @@ -0,0 +1,25 @@ +package com.example.slimfitbackend.service; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class MLModelServiceTest { + + @Test + void getCalorie_ReturnsCorrectCalorieValue() { + double gender = 1.0; + double age = 30; + double height = 175; + double weight = 70; + double duration = 60; + double exerciseTypeNum = 1; + double intensity = 3; + + double expectedCalorie = 93.86078800514693; // An output value from the model + + double actualCalorie = MLModelService.getCalorie(gender, age, height, weight, duration, exerciseTypeNum, intensity); + + assertEquals(expectedCalorie, actualCalorie, 0.01); + } +} diff --git a/src/test/java/com/example/slimfitbackend/service/MyUserDetailsServiceTest.java b/src/test/java/com/example/slimfitbackend/service/MyUserDetailsServiceTest.java new file mode 100644 index 0000000..2c98f16 --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/MyUserDetailsServiceTest.java @@ -0,0 +1,58 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.repository.UserRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.core.userdetails.UsernameNotFoundException; + +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class MyUserDetailsServiceTest { + + @Mock + private UserRepository userRepository; + + @InjectMocks + private MyUserDetailsService userDetailsService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void loadUserByUsername_UserFound_ReturnsUserDetails() { + String username = "test@example.com"; + User user = new User(); + user.setEmail(username); + user.setPassword("hashedPassword"); + + when(userRepository.findByEmail(username)).thenReturn(Optional.of(user)); + + UserDetails userDetails = userDetailsService.loadUserByUsername(username); + + assertNotNull(userDetails); + assertEquals(username, userDetails.getUsername()); + assertEquals("foo", userDetails.getPassword()); // Assuming password is always "foo" for testing purposes + assertTrue(userDetails.getAuthorities().isEmpty()); // Assuming no authorities for simplicity + } + + @Test + void loadUserByUsername_UserNotFound_ThrowsUsernameNotFoundException() { + String username = "nonexistent@example.com"; + + when(userRepository.findByEmail(username)).thenReturn(Optional.empty()); + + assertThrows(UsernameNotFoundException.class, () -> { + userDetailsService.loadUserByUsername(username); + }); + } +} diff --git a/src/test/java/com/example/slimfitbackend/service/ProgressServiceTest.java b/src/test/java/com/example/slimfitbackend/service/ProgressServiceTest.java new file mode 100644 index 0000000..efc4bcd --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/ProgressServiceTest.java @@ -0,0 +1,88 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.WeightProgress; +import com.example.slimfitbackend.payload.UserWeightResponse; +import com.example.slimfitbackend.repository.WeightProgressRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.time.LocalDate; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class ProgressServiceTest { + + @Mock + private WeightProgressRepository weightProgressRepository; + + @Mock + private UserService userService; + + @InjectMocks + private ProgressService progressService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void getActualWeightProgress_ReturnsUserWeightResponseList() throws Exception { + User user = new User(); + user.setUserId(1L); + + WeightProgress weightProgress1 = new WeightProgress(); + weightProgress1.setWeight(70.0); + weightProgress1.setDate(new Date()); + + WeightProgress weightProgress2 = new WeightProgress(); + weightProgress2.setWeight(68.5); + weightProgress2.setDate(new Date()); + + List weightProgressList = new ArrayList<>(); + weightProgressList.add(weightProgress1); + weightProgressList.add(weightProgress2); + + when(userService.getCurrentUser()).thenReturn(user); + when(weightProgressRepository.findAllByUserOrderByDate(user)).thenReturn(weightProgressList); + + List actualWeightProgress = progressService.getActualWeightProgress(); + + assertEquals(2, actualWeightProgress.size()); + assertEquals(70.0, actualWeightProgress.get(0).getWeight()); + assertEquals(68.5, actualWeightProgress.get(1).getWeight()); + } + + @Test + void getUserGoal_ReturnsUserWeightResponseList() throws Exception { + User user = new User(); + + LocalDate today = LocalDate.now(); + LocalDate oneWeekAgo = today.minusWeeks(1); + LocalDate untilDate = oneWeekAgo.minusDays(1); + Date untilUtilDate = Date.from(untilDate.atStartOfDay(ZoneId.systemDefault()).toInstant()); + + user.setStartDate(untilUtilDate); + user.setStartWeight(75.0); + user.setWeeklyWeightLossGoal(500); + + when(userService.getCurrentUser()).thenReturn(user); + + List userGoal = progressService.getUserGoal(); + + assertEquals(2, userGoal.size()); + assertEquals(75.0, userGoal.get(0).getWeight()); + + assertEquals(74.5, userGoal.get(1).getWeight()); + } + +} diff --git a/src/test/java/com/example/slimfitbackend/service/UserActivityServiceTest.java b/src/test/java/com/example/slimfitbackend/service/UserActivityServiceTest.java new file mode 100644 index 0000000..c5fb02e --- /dev/null +++ b/src/test/java/com/example/slimfitbackend/service/UserActivityServiceTest.java @@ -0,0 +1,95 @@ +package com.example.slimfitbackend.service; + +import com.example.slimfitbackend.model.ActivityType; +import com.example.slimfitbackend.model.DailyCalorie; +import com.example.slimfitbackend.model.User; +import com.example.slimfitbackend.model.UserActivity; +import com.example.slimfitbackend.payload.NewActivityRequest; +import com.example.slimfitbackend.payload.NewActivityResponse; +import com.example.slimfitbackend.payload.common.MapStructMapper; +import com.example.slimfitbackend.repository.ActivityTypeRepository; +import com.example.slimfitbackend.repository.DailyCalorieRepository; +import com.example.slimfitbackend.repository.UserActivityRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +import java.util.Date; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class UserActivityServiceTest { + + @Mock + private UserService userService; + + @Mock + private DailyCalorieRepository dailyCalorieRepository; + + @Mock + private ActivityTypeRepository activityTypeRepository; + + @Mock + private DailyCalorieService dailyCalorieService; + + @Mock + private UserActivityRepository userActivityRepository; + + @Mock + private MapStructMapper mapStructMapper; + + @InjectMocks + private UserActivityService userActivityService; + + @BeforeEach + void setUp() { + MockitoAnnotations.openMocks(this); + } + + @Test + void addNewActivity_ReturnsNewActivityResponse() { + User user = new User(); + user.setUserId(1L); + + NewActivityRequest newActivityRequest = new NewActivityRequest(); + newActivityRequest.setDate(new Date()); + newActivityRequest.setDuration(60); + newActivityRequest.setIntensity(2); + newActivityRequest.setCalorie(300); + newActivityRequest.setActivityType(1L); + + ActivityType activityType = new ActivityType(); + activityType.setActId(1L); + activityType.setName("Running"); + + UserActivity userActivity = new UserActivity(); + userActivity.setUser(user); + userActivity.setDate(newActivityRequest.getDate()); + userActivity.setDuration(newActivityRequest.getDuration()); + userActivity.setIntensity(newActivityRequest.getIntensity()); + userActivity.setCalorie(newActivityRequest.getCalorie()); + userActivity.setActivityType(activityType); + + when(userService.getCurrentUser()).thenReturn(user); + when(activityTypeRepository.findById(newActivityRequest.getActivityType())).thenReturn(Optional.of(activityType)); + when(userActivityRepository.save(any(UserActivity.class))).thenReturn(userActivity); + when(dailyCalorieService.getDailyCalorie(any(),any())).thenReturn(new DailyCalorie()); + + NewActivityResponse expectedResponse = new NewActivityResponse(); + expectedResponse.setDate(userActivity.getDate()); + expectedResponse.setDuration(userActivity.getDuration()); + expectedResponse.setIntensity(userActivity.getIntensity()); + expectedResponse.setCalorie(userActivity.getCalorie()); + + when(mapStructMapper.userActivityToNewActivityResponse(userActivity)).thenReturn(expectedResponse); + + NewActivityResponse actualResponse = userActivityService.addNewActivity(newActivityRequest); + + assertEquals(expectedResponse, actualResponse); + } + +} diff --git a/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java index b909a8a..8b28db8 100644 --- a/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java +++ b/src/test/java/com/example/slimfitbackend/service/UserServiceTest.java @@ -1,11 +1,14 @@ package com.example.slimfitbackend.service; +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +import com.example.slimfitbackend.exceptions.CustomException; import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.model.WeightProgress; import com.example.slimfitbackend.payload.GetUserResponse; import com.example.slimfitbackend.payload.SaveUserWeightRequest; import com.example.slimfitbackend.payload.UserWeightResponse; -import com.example.slimfitbackend.payload.SaveUserRequest; import com.example.slimfitbackend.payload.common.MapStructMapper; import com.example.slimfitbackend.repository.UserRepository; import com.example.slimfitbackend.repository.WeightProgressRepository; @@ -15,15 +18,7 @@ import org.mockito.Mock; import org.mockito.MockitoAnnotations; -import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.Optional; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.Mockito.when; class UserServiceTest { @@ -41,84 +36,130 @@ class UserServiceTest { @BeforeEach void setUp() { - MockitoAnnotations.openMocks(this); + MockitoAnnotations.initMocks(this); } + @Test - void testCreateNewUser() { - // Given - SaveUserRequest saveUserRequest = new SaveUserRequest(); - saveUserRequest.setDateOfBirth(new Date()); - saveUserRequest.setHeight(170); - saveUserRequest.setWeight(70); - saveUserRequest.setGender(1); - saveUserRequest.setWeeklyWeightLossGoal(500); - saveUserRequest.setDailyActivityGoal(500); + void testGetCurrentUser() { + // Arrange + User user = new User(); + user.setEmail("test@example.com"); + + UserService userServiceSpy = spy(userService); + doReturn(user).when(userServiceSpy).getCurrentUser(); + // Act + User currentUser = userServiceSpy.getCurrentUser(); + + // Assert + assertNotNull(currentUser); + assertEquals(user.getEmail(), currentUser.getEmail()); + verify(userServiceSpy, times(1)).getCurrentUser(); + verifyNoMoreInteractions(userServiceSpy); + } + + @Test + void testGetUser() { + // Arrange User user = new User(); user.setEmail("test@example.com"); - when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + GetUserResponse expectedResponse = new GetUserResponse(); + expectedResponse.setEmail("test@example.com"); + + UserService userServiceSpy = spy(userService); + doReturn(user).when(userServiceSpy).getCurrentUser(); + when(mapStructMapper.userToGetUserResponse(user)).thenReturn(expectedResponse); - // When - boolean result = userService.createNewUser(saveUserRequest); + // Act + GetUserResponse response = userServiceSpy.getUser(); - // Then - assertEquals(true, result); + // Assert + assertNotNull(response); + assertEquals(expectedResponse.getEmail(), response.getEmail()); + verify(userServiceSpy, times(1)).getCurrentUser(); + verify(mapStructMapper, times(1)).userToGetUserResponse(user); } @Test - void testGetUser() throws Exception { - // Given + void testGetUserWeightResponse() { + // Arrange User user = new User(); user.setEmail("test@example.com"); - when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); - when(mapStructMapper.userToGetUserResponse(any(User.class))).thenReturn(new GetUserResponse()); + WeightProgress weightProgress = new WeightProgress(); + weightProgress.setWeight(70); + + UserService userServiceSpy = spy(userService); + doReturn(user).when(userServiceSpy).getCurrentUser(); + when(userServiceSpy.getUserWeight()).thenReturn(weightProgress); - // When - GetUserResponse result = userService.getUser(); + // Act + UserWeightResponse response = userServiceSpy.getUserWeightResponse(); - // Then - assertEquals(new GetUserResponse(), result); + // Assert + assertNotNull(response); + assertEquals(70, response.getWeight()); } @Test - void testGetUserWeightResponse() throws Exception { - // Given + void testGetUserWeight() { + // Arrange User user = new User(); user.setEmail("test@example.com"); - List weightProgressList = new ArrayList<>(); WeightProgress weightProgress = new WeightProgress(); weightProgress.setWeight(70); - weightProgressList.add(weightProgress); - when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); - when(weightProgressRepository.findAllByUserOrderByDate(any(User.class))).thenReturn(weightProgressList); + UserService userServiceSpy = spy(userService); + doReturn(user).when(userServiceSpy).getCurrentUser(); + when(weightProgressRepository.findAllByUserOrderByDate(user)).thenReturn(List.of(weightProgress)); - // When - UserWeightResponse result = userService.getUserWeightResponse(); + // Act + WeightProgress result = userServiceSpy.getUserWeight(); - // Then + // Assert + assertNotNull(result); assertEquals(70, result.getWeight()); + verify(userServiceSpy, times(1)).getCurrentUser(); + verify(weightProgressRepository, times(1)).findAllByUserOrderByDate(user); } @Test void testSaveUserWeight() throws Exception { - // Given + // Arrange SaveUserWeightRequest saveUserWeightRequest = new SaveUserWeightRequest(); saveUserWeightRequest.setWeight(70); User user = new User(); user.setEmail("test@example.com"); - when(userRepository.findByEmail(anyString())).thenReturn(Optional.of(user)); + UserService userServiceSpy = spy(userService); + doReturn(user).when(userServiceSpy).getCurrentUser(); - // When - UserWeightResponse result = userService.saveUserWeight(saveUserWeightRequest); + // Act + UserWeightResponse response = userServiceSpy.saveUserWeight(saveUserWeightRequest); - // Then - assertEquals(70, result.getWeight()); + // Assert + assertNotNull(response); + assertEquals(70, response.getWeight()); + verify(userServiceSpy, times(1)).getCurrentUser(); + verify(weightProgressRepository, times(1)).save(any(WeightProgress.class)); + } + + @Test + void testSaveUserWeight_ThrowsException() { + // Arrange + SaveUserWeightRequest saveUserWeightRequest = new SaveUserWeightRequest(); + saveUserWeightRequest.setWeight(70); + + UserService userServiceSpy = spy(userService); + doThrow(CustomException.class).when(userServiceSpy).getCurrentUser(); + + // Act & Assert + assertThrows(CustomException.class, () -> userServiceSpy.saveUserWeight(saveUserWeightRequest)); + verify(userServiceSpy, times(1)).getCurrentUser(); + verifyNoInteractions(weightProgressRepository); } } From 0374d6de396abb4314704d2762cb634a57c06b74 Mon Sep 17 00:00:00 2001 From: Tharindu Silva Date: Sat, 4 May 2024 12:50:45 +0100 Subject: [PATCH 12/16] unit tests --- .../com/example/slimfitbackend/service/UserActivityService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/example/slimfitbackend/service/UserActivityService.java b/src/main/java/com/example/slimfitbackend/service/UserActivityService.java index 5bb90fd..a931ed4 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserActivityService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserActivityService.java @@ -56,7 +56,7 @@ public NewActivityResponse addNewActivity(NewActivityRequest newActivityRequest) DailyCalorie daily = dailyCalorieService.getDailyCalorie(user, newActivityRequest.getDate()); daily.setDailyActivityActual(daily.getDailyActivityActual() + newActivityRequest.getCalorie()); - daily.setDailyActual(daily.getDailyActual() + newActivityRequest.getCalorie()); + daily.setDailyActual(daily.getDailyActual() - newActivityRequest.getCalorie()); dailyCalorieRepository.save(daily); return mapStructMapper.userActivityToNewActivityResponse(userActivity); From 3085b039962e78235eefacc3073a4e878a547d85 Mon Sep 17 00:00:00 2001 From: Hiruni Silva Date: Mon, 6 May 2024 01:16:34 +0100 Subject: [PATCH 13/16] minor changes --- .../controller/IntakeRecordController.java | 8 +- .../slimfitbackend/model/DailyCalorie.java | 133 +----------------- .../slimfitbackend/model/IntakeRecord.java | 57 ++------ .../example/slimfitbackend/model/Message.java | 41 ++---- .../example/slimfitbackend/model/User.java | 15 +- .../slimfitbackend/model/UserActivity.java | 64 ++------- 6 files changed, 41 insertions(+), 277 deletions(-) diff --git a/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java b/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java index 68c7487..f0aff3f 100644 --- a/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java +++ b/src/main/java/com/example/slimfitbackend/controller/IntakeRecordController.java @@ -20,13 +20,7 @@ public class IntakeRecordController { @PostMapping("/newRecord") public IntakeRecordResponse addNewRecord(@RequestBody IntakeRecordRequest intakeRecordRequest) throws Exception { - try{ - IntakeRecordResponse t = intakeRecordService.saveNewIntakeRecord(intakeRecordRequest); - return t; - }catch(Exception e){ - System.out.println(e.getMessage()); - } - return null; + return intakeRecordService.saveNewIntakeRecord(intakeRecordRequest); } } diff --git a/src/main/java/com/example/slimfitbackend/model/DailyCalorie.java b/src/main/java/com/example/slimfitbackend/model/DailyCalorie.java index d2933a6..80e3abe 100644 --- a/src/main/java/com/example/slimfitbackend/model/DailyCalorie.java +++ b/src/main/java/com/example/slimfitbackend/model/DailyCalorie.java @@ -2,6 +2,8 @@ import jakarta.persistence.*; import lombok.Data; +import lombok.Getter; +import lombok.Setter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import java.util.ArrayList; @@ -9,7 +11,8 @@ import java.util.List; @Entity -@Data +@Getter +@Setter @EnableAutoConfiguration @Table(name = "daily_calorie") public class DailyCalorie { @@ -50,132 +53,4 @@ public class DailyCalorie { private long dailyActivityActual; private Date date; - - public long getDailyActivityGoal() { - return dailyActivityGoal; - } - - public void setDailyActivityGoal(long dailyActivityGoal) { - this.dailyActivityGoal = dailyActivityGoal; - } - - public long getDailyActivityActual() { - return dailyActivityActual; - } - - public void setDailyActivityActual(long dailyActivityActual) { - this.dailyActivityActual = dailyActivityActual; - } - - public long getDailyCalorieId() { - return dailyCalorieId; - } - - public void setDailyCalorieId(long dailyCalorieId) { - this.dailyCalorieId = dailyCalorieId; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public List getIntakeRecords() { - return intakeRecords; - } - - public void setIntakeRecords(List intakeRecords) { - this.intakeRecords = intakeRecords; - } - - public long getBreakfastGoal() { - return breakfastGoal; - } - - public void setBreakfastGoal(long breakfastGoal) { - this.breakfastGoal = breakfastGoal; - } - - public long getBreakfastActual() { - return breakfastActual; - } - - public void setBreakfastActual(long breakfastActual) { - this.breakfastActual = breakfastActual; - } - - public long getLunchGoal() { - return lunchGoal; - } - - public void setLunchGoal(long lunchGoal) { - this.lunchGoal = lunchGoal; - } - - public long getLunchActual() { - return lunchActual; - } - - public void setLunchActual(long lunchActual) { - this.lunchActual = lunchActual; - } - - public long getDinnerGoal() { - return dinnerGoal; - } - - public void setDinnerGoal(long dinnerGoal) { - this.dinnerGoal = dinnerGoal; - } - - public long getDinnerActual() { - return dinnerActual; - } - - public void setDinnerActual(long dinnerActual) { - this.dinnerActual = dinnerActual; - } - - public long getSnackGoal() { - return snackGoal; - } - - public void setSnackGoal(long snackGoal) { - this.snackGoal = snackGoal; - } - - public long getSnackActual() { - return snackActual; - } - - public void setSnackActual(long snackActual) { - this.snackActual = snackActual; - } - - public long getDailyGoal() { - return dailyGoal; - } - - public void setDailyGoal(long dailyGoal) { - this.dailyGoal = dailyGoal; - } - - public long getDailyActual() { - return dailyActual; - } - - public void setDailyActual(long dailyActual) { - this.dailyActual = dailyActual; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } diff --git a/src/main/java/com/example/slimfitbackend/model/IntakeRecord.java b/src/main/java/com/example/slimfitbackend/model/IntakeRecord.java index 293a0a9..7abcf1f 100644 --- a/src/main/java/com/example/slimfitbackend/model/IntakeRecord.java +++ b/src/main/java/com/example/slimfitbackend/model/IntakeRecord.java @@ -2,11 +2,15 @@ import jakarta.persistence.*; import lombok.Data; +import lombok.Getter; +import lombok.Setter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import javax.validation.constraints.NotNull; + @Entity -@Data -@EnableAutoConfiguration +@Getter +@Setter @Table(name = "intake_record") public class IntakeRecord { @@ -18,59 +22,14 @@ public class IntakeRecord { @JoinColumn(name = "daily_calorie_id") private DailyCalorie dailyCalorie; + @NotNull private long calorieCount; private String MealName; private String note; + @NotNull private long meal; - public long getIntakeRecordId() { - return IntakeRecordId; - } - - public void setIntakeRecordId(long intakeRecordId) { - IntakeRecordId = intakeRecordId; - } - - public DailyCalorie getDailyCalorie() { - return dailyCalorie; - } - - public void setDailyCalorie(DailyCalorie dailyCalorie) { - this.dailyCalorie = dailyCalorie; - } - - public long getCalorieCount() { - return calorieCount; - } - - public void setCalorieCount(long calorieCount) { - this.calorieCount = calorieCount; - } - - public String getMealName() { - return MealName; - } - - public void setMealName(String mealName) { - MealName = mealName; - } - - public String getNote() { - return note; - } - - public void setNote(String note) { - this.note = note; - } - - public long getMeal() { - return meal; - } - - public void setMeal(long meal) { - this.meal = meal; - } } diff --git a/src/main/java/com/example/slimfitbackend/model/Message.java b/src/main/java/com/example/slimfitbackend/model/Message.java index 569f017..f0f00ba 100644 --- a/src/main/java/com/example/slimfitbackend/model/Message.java +++ b/src/main/java/com/example/slimfitbackend/model/Message.java @@ -4,12 +4,17 @@ import jakarta.persistence.*; import lombok.Builder; import lombok.Data; +import lombok.Getter; +import lombok.Setter; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Past; import java.util.Date; +@Getter +@Setter @Entity -@Data @EnableAutoConfiguration @Table(name = "message") public class Message { @@ -18,43 +23,15 @@ public class Message { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; + @NotNull private String message; + @Past + @NotNull private Date date; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "user_id") private User user; - public Long getId() { - return id; - } - - public void setId(Long id) { - this.id = id; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } } diff --git a/src/main/java/com/example/slimfitbackend/model/User.java b/src/main/java/com/example/slimfitbackend/model/User.java index 81799ae..1d5765d 100644 --- a/src/main/java/com/example/slimfitbackend/model/User.java +++ b/src/main/java/com/example/slimfitbackend/model/User.java @@ -7,6 +7,7 @@ import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import javax.validation.constraints.*; import java.util.ArrayList; import java.util.Collection; import java.util.Date; @@ -15,7 +16,6 @@ @Getter @Setter @Entity -@EnableAutoConfiguration @Table(name = "\"user\"") public class User implements UserDetails { @@ -23,23 +23,30 @@ public class User implements UserDetails { @GeneratedValue(strategy = GenerationType.IDENTITY) private Long userId; - @Column(unique=true) + @Email + @NotNull private String email; + @NotNull private String firstName; + @NotNull private String lastName; + @Min(20) private int age; + @Past private Date dateOfBirth; + @Min(0) + @Max(2) + private int gender; + private double height; private double weight; - private int gender; - private double bmr; private int weeklyWeightLossGoal; diff --git a/src/main/java/com/example/slimfitbackend/model/UserActivity.java b/src/main/java/com/example/slimfitbackend/model/UserActivity.java index efb81c8..0ed38fd 100644 --- a/src/main/java/com/example/slimfitbackend/model/UserActivity.java +++ b/src/main/java/com/example/slimfitbackend/model/UserActivity.java @@ -4,11 +4,13 @@ import lombok.Data; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import javax.validation.constraints.NotNull; +import javax.validation.constraints.Past; import java.util.Date; + @Entity @Data -@EnableAutoConfiguration @Table(name = "user_activity") public class UserActivity { @@ -24,67 +26,17 @@ public class UserActivity { @JoinColumn(name = "act_id") private ActivityType activityType; + @NotNull private long calorie; + @NotNull private long duration; + @NotNull private long intensity; + @Past + @NotNull private Date date; - public Long getUserActivityId() { - return userActivityId; - } - - public void setUserActivityId(Long userActivityId) { - this.userActivityId = userActivityId; - } - - public User getUser() { - return user; - } - - public void setUser(User user) { - this.user = user; - } - - public ActivityType getActivityType() { - return activityType; - } - - public void setActivityType(ActivityType activityType) { - this.activityType = activityType; - } - - public long getCalorie() { - return calorie; - } - - public void setCalorie(long calorie) { - this.calorie = calorie; - } - - public long getDuration() { - return duration; - } - - public void setDuration(long duration) { - this.duration = duration; - } - - public long getIntensity() { - return intensity; - } - - public void setIntensity(long intensity) { - this.intensity = intensity; - } - - public Date getDate() { - return date; - } - - public void setDate(Date date) { - this.date = date; - } } From d85628edb479b1abe5ecf9afa5af1177e0f78876 Mon Sep 17 00:00:00 2001 From: Hiruni Silva Date: Tue, 7 May 2024 17:19:38 +0100 Subject: [PATCH 14/16] minor fixes --- .../slimfitbackend/repository/UserActivityRepository.java | 3 ++- .../slimfitbackend/service/DailyCalorieService.java | 8 ++++---- .../slimfitbackend/service/IntakeRecordService.java | 2 +- .../com/example/slimfitbackend/service/UserService.java | 2 +- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java b/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java index 04b3349..4ee6782 100644 --- a/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java +++ b/src/main/java/com/example/slimfitbackend/repository/UserActivityRepository.java @@ -1,5 +1,6 @@ package com.example.slimfitbackend.repository; +import com.example.slimfitbackend.model.User; import com.example.slimfitbackend.model.UserActivity; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; @@ -10,5 +11,5 @@ @Repository public interface UserActivityRepository extends JpaRepository { - List findAllByDateBetween(Date startDate, Date endDate); + List findAllByDateBetweenAndUser(Date startDate, Date endDate, User user); } diff --git a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java index aafbd21..6ef9d39 100644 --- a/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java +++ b/src/main/java/com/example/slimfitbackend/service/DailyCalorieService.java @@ -70,18 +70,18 @@ public DailyCalorieResponseDto getDailyCalorieResponse(GetDailyCalorieDto getDai DailyCalorieResponseDto returnObject = mapStructMapper.dailyCalorietoDailyCalorieResponseDto(dailyCalorie); returnObject.setCurrentWeight(userService.getUserWeight().getWeight()); returnObject.setTargetWeight(user.getTargetWeight()); - returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate())); + returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate(),user)); return returnObject; } // get from db comparing date if not found create DailyCalorieResponseDto returnObject = mapStructMapper.dailyCalorietoDailyCalorieResponseDto(optDailyCal.get()); returnObject.setCurrentWeight(userService.getUserWeight().getWeight()); returnObject.setTargetWeight(user.getTargetWeight()); - returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate())); + returnObject.setTotalActiveMinutes(getDailyActiveMinutes(getDailyCalorieDto.getDate(),user)); return returnObject; } - public int getDailyActiveMinutes(Date currentDate){ + public int getDailyActiveMinutes(Date currentDate, User user){ // Set the time to midnight represent the start of the day Calendar calendar = Calendar.getInstance(); @@ -97,7 +97,7 @@ public int getDailyActiveMinutes(Date currentDate){ calendar.set(Calendar.SECOND, 59); Date endDate = calendar.getTime(); - List todayActivities = userActivityRepository.findAllByDateBetween(startDate,endDate); + List todayActivities = userActivityRepository.findAllByDateBetweenAndUser(startDate,endDate,user); int totalMinutes = 0; for (UserActivity todayActivity : todayActivities) { totalMinutes += (int) todayActivity.getDuration(); diff --git a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java index 0227433..22e5b21 100644 --- a/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java +++ b/src/main/java/com/example/slimfitbackend/service/IntakeRecordService.java @@ -33,7 +33,7 @@ public class IntakeRecordService { public SearchFoodCalResponse getCalorieForFood(SearchFoodCalRequest searchFoodCalRequest) { try{ - String apiUrl = "https://api.edamam.com/api/food-database/parser?nutrition-type=logging&app_id=07d50733&app_key=80fcb49b500737827a9a23f7049653b9&ingr=" + searchFoodCalRequest.getFoodName(); + String apiUrl = "https://api.edamam.com/api/food-database/parser?nutrition-type=logging&app_id=f0a49c1a&app_key=e34b74716a82c88c26a7353d340b90b4&ingr=" + searchFoodCalRequest.getFoodName(); RestTemplate restTemplate = new RestTemplate(); ResponseEntity response = restTemplate.getForEntity(apiUrl, String.class); JSONObject json = new JSONObject(response); diff --git a/src/main/java/com/example/slimfitbackend/service/UserService.java b/src/main/java/com/example/slimfitbackend/service/UserService.java index 416ef81..4a7d86a 100644 --- a/src/main/java/com/example/slimfitbackend/service/UserService.java +++ b/src/main/java/com/example/slimfitbackend/service/UserService.java @@ -45,7 +45,7 @@ public boolean createNewUser(SaveUserRequest saveUserRequest) { user.setStartWeight(saveUserRequest.getWeight()); user.setGender(saveUserRequest.getGender()); user.setStartDate(new Date()); - user.setTargetWeight(saveUserRequest.getWeight()); + user.setTargetWeight(saveUserRequest.getTargetWeight()); //1 == male 2 == female if (user.getGender() == 1) { From 01e23cadecd52f502314a728e54b09e0a9b0fae6 Mon Sep 17 00:00:00 2001 From: Tharindu Silva <78898203+TharinduSilva2019774@users.noreply.github.com> Date: Tue, 7 May 2024 17:53:12 +0100 Subject: [PATCH 15/16] Create README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..7a2419c --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +**How to run** +1 open using intellij idea +2 run the following file src/main/java/com/example/slimfitbackend/SlimFitBackendApplication.java From 727f1b167dab120798cb97bf4d6d9cb9a5196717 Mon Sep 17 00:00:00 2001 From: Tharindu Silva <78898203+TharinduSilva2019774@users.noreply.github.com> Date: Tue, 7 May 2024 17:54:38 +0100 Subject: [PATCH 16/16] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7a2419c..5216c44 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -**How to run** -1 open using intellij idea +# How to run +1 open using intellij idea
2 run the following file src/main/java/com/example/slimfitbackend/SlimFitBackendApplication.java