From 7ace69361bc303dab743b53fed62363de51a1702 Mon Sep 17 00:00:00 2001 From: yooputer Date: Mon, 13 Feb 2023 09:55:46 +0900 Subject: [PATCH 01/16] =?UTF-8?q?[FEAT]=20createMedication=20api=EC=97=90?= =?UTF-8?q?=EC=84=9C=20DosingTime=EC=9D=84=20=EB=A6=AC=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EB=B0=9B=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/MedicationController.java | 6 ++-- .../medication/CreateMedicationRequest.java | 5 +-- .../medication/ModifyMedicationRequest.java | 3 +- .../dto/dto/medication/MedicationDTO.java | 11 ++++-- .../withparents/entity/Medication.java | 9 +++-- .../entity/MedicationDosingTime.java | 33 +++++++++++++++++ .../service/MedicationService.java | 35 ++++++++++--------- 7 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/sswugdsc4a/withparents/entity/MedicationDosingTime.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/MedicationController.java b/src/main/java/com/sswugdsc4a/withparents/controller/MedicationController.java index fbe33c5..4c9866d 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/MedicationController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/MedicationController.java @@ -23,7 +23,8 @@ public MedicationDTO createMedication( body.getUserId(), body.getDescription(), body.getDayOfTheWeekList(), - body.getDosingTime() + body.getDosingTimeList(), + body.getNotificationStatus() ); } @@ -35,7 +36,8 @@ public MedicationDTO modifyMedication( body.getMedicationId(), body.getDescription(), body.getDayOfTheWeekList(), - body.getDosingTime() + body.getDosingTimeList(), + body.getNotificationStatus() ); } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/CreateMedicationRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/CreateMedicationRequest.java index af32a6a..8daac39 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/CreateMedicationRequest.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/CreateMedicationRequest.java @@ -3,6 +3,7 @@ import lombok.Getter; import java.time.LocalTime; +import java.util.List; @Getter public class CreateMedicationRequest { @@ -10,6 +11,6 @@ public class CreateMedicationRequest { private Long userId; private String description; private String dayOfTheWeekList; - private LocalTime dosingTime; - + private List dosingTimeList; + private Boolean notificationStatus; } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/ModifyMedicationRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/ModifyMedicationRequest.java index 7758df7..e270dc5 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/ModifyMedicationRequest.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/medication/ModifyMedicationRequest.java @@ -11,6 +11,7 @@ public class ModifyMedicationRequest { private Long medicationId; private String description; private String dayOfTheWeekList; - private LocalTime dosingTime; + private List dosingTimeList; + private Boolean notificationStatus;; } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/medication/MedicationDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/medication/MedicationDTO.java index 4a6be1c..38e1d28 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/dto/medication/MedicationDTO.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/medication/MedicationDTO.java @@ -6,6 +6,8 @@ import lombok.Setter; import java.time.LocalTime; +import java.util.List; +import java.util.stream.Collectors; @Getter @Setter @@ -16,7 +18,8 @@ public class MedicationDTO { private Long userId; private String description; private String dayOfTheWeekList; - private LocalTime dosingTime; + private List dosingTimes; + private Boolean notificationStatus; public static MedicationDTO entityToDto(Medication e){ return new MedicationDTO( @@ -24,7 +27,11 @@ public static MedicationDTO entityToDto(Medication e){ e.getUser().getId(), e.getDescription(), e.getDayOfTheWeekList(), - e.getDosingTime() + e.getDosingTimeList() + .stream() + .map(t -> {return t.getTime();}) + .collect(Collectors.toList()), + e.getNotificationStatus() ); } diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Medication.java b/src/main/java/com/sswugdsc4a/withparents/entity/Medication.java index 8bb91c4..68ab8ff 100644 --- a/src/main/java/com/sswugdsc4a/withparents/entity/Medication.java +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Medication.java @@ -6,7 +6,8 @@ import lombok.Setter; import javax.persistence.*; -import java.time.LocalTime; +import java.util.ArrayList; +import java.util.List; @Entity @Getter @@ -30,6 +31,10 @@ public class Medication { @Column(length = 7) private String dayOfTheWeekList; - private LocalTime dosingTime; + @ElementCollection + @CollectionTable(name = "medication_dosing_time", joinColumns = @JoinColumn(name = "medicationId")) + private List dosingTimeList = new ArrayList<>(); + + private Boolean notificationStatus; } diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/MedicationDosingTime.java b/src/main/java/com/sswugdsc4a/withparents/entity/MedicationDosingTime.java new file mode 100644 index 0000000..2db69d5 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/MedicationDosingTime.java @@ -0,0 +1,33 @@ +package com.sswugdsc4a.withparents.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.*; +import java.time.LocalTime; +import java.util.Objects; + +@Embeddable +@NoArgsConstructor +@AllArgsConstructor +@Getter +@Setter +public class MedicationDosingTime { + + private LocalTime time; + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + MedicationDosingTime that = (MedicationDosingTime) o; + return Objects.equals(time, that.time); + } + + @Override + public int hashCode() { + return Objects.hash(time); + } +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java b/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java index fbb5eb0..c74faf5 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java @@ -2,6 +2,7 @@ import com.sswugdsc4a.withparents.dto.dto.medication.MedicationDTO; import com.sswugdsc4a.withparents.entity.Medication; +import com.sswugdsc4a.withparents.entity.MedicationDosingTime; import com.sswugdsc4a.withparents.entity.User; import com.sswugdsc4a.withparents.exception.CustomException; import com.sswugdsc4a.withparents.repository.MedicationRepository; @@ -26,27 +27,26 @@ public MedicationDTO createMedication( Long userId, String description, String dayOfTheWeekList, - LocalTime dosingTime + List dosingTimeList, + Boolean notificationStatus ) { if (!userService.areTheyAFamily(userId)) { throw new CustomException("Family id is different"); } - return MedicationDTO.entityToDto( - medicationRepository.save( - new Medication( - null, - userService.getUserById(userId), - description, - dayOfTheWeekList, - dosingTime - - ) - ) + Medication medication = medicationRepository.save( + new Medication( + null, + userService.getUserById(userId), + description, + dayOfTheWeekList, + dosingTimeList.stream().map(t -> new MedicationDosingTime(t)).collect(Collectors.toList()), + notificationStatus + ) ); - + return MedicationDTO.entityToDto(medication); } @Transactional @@ -54,7 +54,8 @@ public MedicationDTO modifyMedication( Long medicationId, String description, String dayOfTheWeekList, - LocalTime dosingTime + List dosingTimeList, + Boolean notificationStatus ) { Medication medication = medicationRepository.findById(medicationId) @@ -73,9 +74,9 @@ public MedicationDTO modifyMedication( medication.setDayOfTheWeekList(dayOfTheWeekList); } - if (dosingTime != null) { - medication.setDosingTime(dosingTime); - } +// if (dosingTime != null) { +// medication.setDosingTime(dosingTime); +// } return MedicationDTO.entityToDto(medication); From 686e76fc016d96e908144d4d4b0a7876bd3f0575 Mon Sep 17 00:00:00 2001 From: yooputer Date: Mon, 13 Feb 2023 10:03:12 +0900 Subject: [PATCH 02/16] =?UTF-8?q?[FIX]=20modifyMedication=20api=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../withparents/service/MedicationService.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java b/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java index c74faf5..dad52a7 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/MedicationService.java @@ -74,9 +74,19 @@ public MedicationDTO modifyMedication( medication.setDayOfTheWeekList(dayOfTheWeekList); } -// if (dosingTime != null) { -// medication.setDosingTime(dosingTime); -// } + if (dosingTimeList != null) { + medication.setDosingTimeList( + dosingTimeList + .stream() + .map(t -> {return new MedicationDosingTime(t);}) + .collect(Collectors.toList() + ) + ); + } + + if (notificationStatus != null) { + medication.setNotificationStatus(notificationStatus); + } return MedicationDTO.entityToDto(medication); From 5fb59cf3cf37e671bfa4eb2f1e336d67d06d99a2 Mon Sep 17 00:00:00 2001 From: yooputer Date: Tue, 14 Feb 2023 09:45:55 +0900 Subject: [PATCH 03/16] =?UTF-8?q?[FIX]=20Location=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0,=20DTO,=20setLocationInfo=20api=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sswugdsc4a/withparents/controller/UserController.java | 4 +++- .../dto/Request/user/SetLocationInfoRequest.java | 3 ++- .../withparents/dto/dto/user/LocationInfoDTO.java | 6 ++++-- .../com/sswugdsc4a/withparents/entity/LocationInfo.java | 4 +++- .../com/sswugdsc4a/withparents/service/UserService.java | 6 ++++-- 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java index 6624f13..04f8ea9 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java @@ -47,7 +47,9 @@ public UserDTO getUserInfo(){ public LocationInfoDTO setLocationInfo( @RequestBody SetLocationInfoRequest body ){ - return userService.setLocationInfo(body.getLocationInfo()); + return userService.setLocationInfo( + body.getLatitude(), + body.getLatitude()); } @GetMapping("/api/user/getLocationInfo") diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/user/SetLocationInfoRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/user/SetLocationInfoRequest.java index 6710e5c..4ca62b7 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/Request/user/SetLocationInfoRequest.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/user/SetLocationInfoRequest.java @@ -4,5 +4,6 @@ @Getter public class SetLocationInfoRequest { - private String locationInfo; + private String latitude; + private String longitude; } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationInfoDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationInfoDTO.java index c4cff4c..0f75747 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationInfoDTO.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationInfoDTO.java @@ -14,13 +14,15 @@ public class LocationInfoDTO { private Long userId; private LocalDateTime lastModifiedDate; - private String locationInfo; + private String latitude; + private String longitude; public static LocationInfoDTO entityToDTO(LocationInfo e){ return new LocationInfoDTO( e.getUserId(), e.getLastModifiedDate(), - e.getLocationInfo() + e.getLatitude(), + e.getLongitude() ); } diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/LocationInfo.java b/src/main/java/com/sswugdsc4a/withparents/entity/LocationInfo.java index ced0766..d306d8d 100644 --- a/src/main/java/com/sswugdsc4a/withparents/entity/LocationInfo.java +++ b/src/main/java/com/sswugdsc4a/withparents/entity/LocationInfo.java @@ -25,6 +25,8 @@ public class LocationInfo { @LastModifiedDate private LocalDateTime lastModifiedDate; - private String locationInfo; + private String latitude; + + private String longitude; } diff --git a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java index 008f52f..f44ffec 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java @@ -129,7 +129,8 @@ public UserDTO modifyUserInfo( } public LocationInfoDTO setLocationInfo( - String locationInfo + String latitude, + String longitude ) { return LocationInfoDTO.entityToDTO( @@ -137,7 +138,8 @@ public LocationInfoDTO setLocationInfo( new LocationInfo( getUser().getId(), null, - locationInfo + latitude, + longitude ) ) ); From 50a0f564bc97086b4ace6dcc484e737f9b509f54 Mon Sep 17 00:00:00 2001 From: yooputer Date: Tue, 14 Feb 2023 10:35:42 +0900 Subject: [PATCH 04/16] =?UTF-8?q?[FIX]=20getLocationInfo=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserController.java | 16 ++++---- .../dto/dto/user/LocationAndNicknameDTO.java | 15 +++++++ .../repository/UserRepository.java | 6 +++ .../withparents/service/UserService.java | 40 +++++++++++++------ 4 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationAndNicknameDTO.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java index 04f8ea9..9713d73 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java @@ -1,15 +1,15 @@ package com.sswugdsc4a.withparents.controller; -import com.sswugdsc4a.withparents.dto.dto.user.FamilyDTO; -import com.sswugdsc4a.withparents.dto.dto.user.LocationInfoDTO; -import com.sswugdsc4a.withparents.dto.dto.user.SimpleUserInfoDTO; -import com.sswugdsc4a.withparents.dto.dto.user.UserDTO; +import com.sswugdsc4a.withparents.dto.dto.user.*; import com.sswugdsc4a.withparents.dto.request.user.CreateFamilyRequest; import com.sswugdsc4a.withparents.dto.request.user.ModifyUserInfoRequest; import com.sswugdsc4a.withparents.dto.request.user.SetLocationInfoRequest; import com.sswugdsc4a.withparents.service.UserService; import lombok.RequiredArgsConstructor; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; import java.util.List; @@ -53,10 +53,8 @@ public LocationInfoDTO setLocationInfo( } @GetMapping("/api/user/getLocationInfo") - public LocationInfoDTO getLocationInfo( - @RequestParam Long userId - ){ - return userService.getLocationInfo(userId); + public List getLocationInfo(){ + return userService.getLocationInfo(); } @GetMapping("/api/user/getFamilyMemberList") diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationAndNicknameDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationAndNicknameDTO.java new file mode 100644 index 0000000..f668146 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/LocationAndNicknameDTO.java @@ -0,0 +1,15 @@ +package com.sswugdsc4a.withparents.dto.dto.user; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +@Getter +@AllArgsConstructor +public class LocationAndNicknameDTO { + + private Long userId; + private String nickname; + private String latitude; + private String longitude; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/UserRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/UserRepository.java index c2b5afc..91e9524 100644 --- a/src/main/java/com/sswugdsc4a/withparents/repository/UserRepository.java +++ b/src/main/java/com/sswugdsc4a/withparents/repository/UserRepository.java @@ -2,6 +2,7 @@ import com.sswugdsc4a.withparents.entity.User; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import java.util.List; import java.util.Optional; @@ -11,4 +12,9 @@ public interface UserRepository extends JpaRepository { Optional findByEmail(String email); List findAllByFamilyId(Long familyId); + + @Query(value = "SELECT * from users " + + "WHERE family_id = ?1 AND " + + "is_parent = true", nativeQuery = true) + List getParents(Long familyId); } diff --git a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java index f44ffec..ca6fb48 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java @@ -1,9 +1,6 @@ package com.sswugdsc4a.withparents.service; -import com.sswugdsc4a.withparents.dto.dto.user.FamilyDTO; -import com.sswugdsc4a.withparents.dto.dto.user.LocationInfoDTO; -import com.sswugdsc4a.withparents.dto.dto.user.SimpleUserInfoDTO; -import com.sswugdsc4a.withparents.dto.dto.user.UserDTO; +import com.sswugdsc4a.withparents.dto.dto.user.*; import com.sswugdsc4a.withparents.entity.Family; import com.sswugdsc4a.withparents.entity.LocationInfo; import com.sswugdsc4a.withparents.entity.User; @@ -146,20 +143,39 @@ public LocationInfoDTO setLocationInfo( } - public LocationInfoDTO getLocationInfo(Long userId) { + public List getLocationInfo() { - if (!areTheyAFamily(userId)) { - throw new CustomException("Family id is different"); + User user = getUser(); + + if (user.getFamily() == null) { + throw new CustomException("Family id does not exist"); } - LocationInfo locationInfo = locationInfoRepository.findById(userId).orElse(null); + List parents = userRepository.getParents(user.getFamily().getId()); - if (locationInfo == null) { - return null; - } + return parents + .stream() + .map(p -> { + LocationInfo locationInfo = locationInfoRepository.findById(p.getId()).orElse(null); - return LocationInfoDTO.entityToDTO(locationInfo); + if (locationInfo == null) { + return new LocationAndNicknameDTO( + p.getId(), + p.getNickname(), + null, + null + ); + } + return new LocationAndNicknameDTO( + p.getId(), + p.getNickname(), + locationInfo.getLatitude(), + locationInfo.getLongitude() + ); + + }) + .collect(Collectors.toList()); } public List getFamilyMemberList(){ From 3ff22dba65d26a404cee56155d16e4c4b1c4da52 Mon Sep 17 00:00:00 2001 From: yooputer Date: Mon, 20 Feb 2023 16:23:07 +0900 Subject: [PATCH 05/16] =?UTF-8?q?[FEAT]=20getHomeInfo=20api=20=EA=B0=9C?= =?UTF-8?q?=EB=B0=9C(=EB=AF=B8=EC=99=84=EC=84=B1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/UserController.java | 5 +++ .../withparents/dto/dto/user/HomeInfoDTO.java | 19 ++++++++++ .../withparents/service/UserService.java | 36 +++++++++++++++++++ 3 files changed, 60 insertions(+) create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java index 9713d73..5c9b0e4 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java @@ -62,4 +62,9 @@ public List getFamilyMemberIdList(){ return userService.getFamilyMemberList(); } + @GetMapping("/api/user/getHomeInfo") + public HomeInfoDTO getHomeInfo(){ + return userService.getHomeInfo(); + } + } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java new file mode 100644 index 0000000..166971e --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java @@ -0,0 +1,19 @@ +package com.sswugdsc4a.withparents.dto.dto.user; + +import com.sswugdsc4a.withparents.dto.dto.medication.MedicationDTO; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.List; + +@Getter +@Setter +@NoArgsConstructor +public class HomeInfoDTO { + + private List userList; + private List todayMedicationList; + // TODO: 오늘의 일정, 최신 포스팅 추가 + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java index ca6fb48..c45c56f 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java @@ -1,5 +1,6 @@ package com.sswugdsc4a.withparents.service; +import com.sswugdsc4a.withparents.dto.dto.medication.MedicationDTO; import com.sswugdsc4a.withparents.dto.dto.user.*; import com.sswugdsc4a.withparents.entity.Family; import com.sswugdsc4a.withparents.entity.LocationInfo; @@ -7,12 +8,14 @@ import com.sswugdsc4a.withparents.exception.CustomException; import com.sswugdsc4a.withparents.repository.FamilyRepository; import com.sswugdsc4a.withparents.repository.LocationInfoRepository; +import com.sswugdsc4a.withparents.repository.MedicationRepository; import com.sswugdsc4a.withparents.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import javax.transaction.Transactional; +import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @@ -23,6 +26,7 @@ public class UserService { private final UserRepository userRepository; private final FamilyRepository familyRepository; private final LocationInfoRepository locationInfoRepository; + private final MedicationRepository medicationRepository; public User getUser(){ String userId = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -193,4 +197,36 @@ public List getFamilyMemberList(){ } + public HomeInfoDTO getHomeInfo() { + + HomeInfoDTO response = new HomeInfoDTO(); + response.setUserList(getFamilyMemberList()); + response.setTodayMedicationList(getTodayMedicationList()); + + // TODO: 오늘의 일정, 최신 포스팅 추가 + + return response; + + } + + private List getTodayMedicationList(){ + int dayOfWeekNumber = switch (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)) { + case 1 -> 6; // sun + case 2 -> 0; // mon + case 3 -> 1; // tue + case 4 -> 2; // wed + case 5 -> 3; // thu + case 6 -> 4; // fri + case 7 -> 5; // sat + default -> 8; // ??? + }; + + return medicationRepository.findAllByUserId(getUser().getId()) + .stream() + .filter(e -> { + return e.getDayOfTheWeekList().charAt(dayOfWeekNumber) == '1'; + }) + .map(e -> MedicationDTO.entityToDto(e)) + .collect(Collectors.toList()); + } } From 5a7e6a636d3d3e673f870d96fc73099b1a965d56 Mon Sep 17 00:00:00 2001 From: yooputer Date: Mon, 20 Feb 2023 17:12:40 +0900 Subject: [PATCH 06/16] =?UTF-8?q?[FEAT]=20Schedule=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0,=20dto,=20=EB=A0=88=ED=8C=8C=EC=A7=80=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../withparents/dto/dto/ScheduleDTO.java | 33 +++++++++++++++ .../withparents/entity/Schedule.java | 40 +++++++++++++++++++ .../repository/ScheduleRepository.java | 22 ++++++++++ 3 files changed, 95 insertions(+) create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/dto/ScheduleDTO.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/ScheduleDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/ScheduleDTO.java new file mode 100644 index 0000000..44bcd03 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/ScheduleDTO.java @@ -0,0 +1,33 @@ +package com.sswugdsc4a.withparents.dto.dto; + +import com.sswugdsc4a.withparents.entity.Schedule; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +@Setter +@AllArgsConstructor +public class ScheduleDTO { + + private Long id; + private Long creatorId; + private String title; + private LocalDate date; + private LocalTime time; + private Boolean notificationStatus; + + public static ScheduleDTO entityToDTO(Schedule e){ + return new ScheduleDTO( + e.getId(), + e.getCreator().getId(), + e.getTitle(), + e.getDate(), + e.getTime(), + e.getNotificationState() + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java new file mode 100644 index 0000000..4de8261 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java @@ -0,0 +1,40 @@ +package com.sswugdsc4a.withparents.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.annotation.CreatedDate; + +import javax.persistence.*; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class Schedule{ + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "schedule_id") + private Long id; + + @ManyToOne + @JoinColumn(name = "family_id") + private Family family; + + @ManyToOne + @JoinColumn(name = "creator_id") + private User creator; + + @CreatedDate + private LocalDateTime createDate; + + private String title; + private LocalDate date; + private LocalTime time; + private Boolean notificationState; +} diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java new file mode 100644 index 0000000..60016a6 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/repository/ScheduleRepository.java @@ -0,0 +1,22 @@ +package com.sswugdsc4a.withparents.repository; + +import com.sswugdsc4a.withparents.entity.Schedule; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.time.LocalDate; +import java.util.List; + +public interface ScheduleRepository extends JpaRepository { + + @Query(value = "SELECT * FROM schedule WHERE family_id = ?1 AND " + + "YEAR(date) = ?2 AND MONTH(date) = ?3 ; " + , nativeQuery = true) + List getScheduleByYearAndMonth(Long familyId, int year, int month); + + @Query(value = "SELECT * FROM schedule WHERE family_id = ?1 AND " + + "date = ?2 ; " + , nativeQuery = true) + List getTodaySchedule(Long familyId, LocalDate date); + +} From fb8a9f5c61e3ae3dca87a8dcc7c10df1306ef0ea Mon Sep 17 00:00:00 2001 From: yooputer Date: Mon, 20 Feb 2023 17:13:28 +0900 Subject: [PATCH 07/16] =?UTF-8?q?[FEAT]=20createSchedule,=20getScheduleLis?= =?UTF-8?q?t,=20getTodayScheduleList,=20deleteSchedule=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScheduleController.java | 49 ++++++++++ .../schedule/CreateScheduleRequest.java | 14 +++ .../withparents/service/ScheduleService.java | 93 +++++++++++++++++++ 3 files changed, 156 insertions(+) create mode 100644 src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java new file mode 100644 index 0000000..cb0459a --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java @@ -0,0 +1,49 @@ +package com.sswugdsc4a.withparents.controller; + +import com.sswugdsc4a.withparents.dto.dto.ScheduleDTO; +import com.sswugdsc4a.withparents.dto.request.schedule.CreateScheduleRequest; +import com.sswugdsc4a.withparents.service.ScheduleService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequiredArgsConstructor +public class ScheduleController { + private final ScheduleService scheduleService; + + @PostMapping("/api/schedule/createSchedule") + public ScheduleDTO createSchedule( + @RequestBody CreateScheduleRequest body + ) { + return scheduleService.createSchedule( + body.getTitle(), + body.getDate(), + body.getTime(), + body.getNotificationStatus() + ); + } + + @GetMapping("/api/schedule/getScheduleList") + public List getScheduleList( + @RequestParam int year, + @RequestParam int month + ) { + return scheduleService.getScheduleList(year, month); + } + + @GetMapping("/api/schedule/getTodayScheduleList") + public List getTodayScheduleList( + ) { + return scheduleService.getTodayScheduleList(); + } + + @DeleteMapping("/api/schedule/deleteSchedule") + public void deleteSchedule( + @RequestParam Long scheduleId + ){ + scheduleService.deleteSchedule(scheduleId); + } +}; + diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java new file mode 100644 index 0000000..06e0b05 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/CreateScheduleRequest.java @@ -0,0 +1,14 @@ +package com.sswugdsc4a.withparents.dto.request.schedule; + +import lombok.Getter; + +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +public class CreateScheduleRequest { + private String title; + private LocalDate date; + private LocalTime time; + private Boolean notificationStatus; +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java new file mode 100644 index 0000000..7519a28 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java @@ -0,0 +1,93 @@ +package com.sswugdsc4a.withparents.service; + +import com.sswugdsc4a.withparents.dto.dto.ScheduleDTO; +import com.sswugdsc4a.withparents.entity.Schedule; +import com.sswugdsc4a.withparents.exception.CustomException; +import com.sswugdsc4a.withparents.repository.ScheduleRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +import javax.transaction.Transactional; +import java.time.LocalDate; +import java.time.LocalTime; +import java.util.List; +import java.util.stream.Collectors; + +@Service +@RequiredArgsConstructor +public class ScheduleService { + + private final ScheduleRepository scheduleRepository; + private final UserService userService; + + @Transactional + public ScheduleDTO createSchedule( + String title, + LocalDate date, + LocalTime time, + Boolean notificationStatus + ) { + + if (userService.getUser().getFamily() == null) { + throw new CustomException("Family id does not exist"); + } + + return ScheduleDTO.entityToDTO( + scheduleRepository.save( + new Schedule( + null, + userService.getUser().getFamily(), + userService.getUser(), + null, + title, + date, + time, + notificationStatus + ) + ) + ); + } + + @Transactional + public void deleteSchedule( + Long scheduleId + ){ + Schedule schedule = scheduleRepository.findById(scheduleId) + .orElseThrow(()->new CustomException("invalid schedule id")); + + if (schedule.getCreator().getId() != userService.getUser().getId()) { + throw new CustomException("Only schedule creator can be deleted"); + } + + scheduleRepository.delete(schedule); + } + + public List getScheduleList( + int year, + int month + ) { + + if (userService.getUser().getFamily() == null) { + throw new CustomException("Family id does not exist"); + } + + return scheduleRepository.getScheduleByYearAndMonth( + userService.getUser().getFamily().getId(), year, month) + .stream() + .map(e -> {return ScheduleDTO.entityToDTO(e);}) + .collect(Collectors.toList()); + } + + public List getTodayScheduleList(){ + + if (userService.getUser().getFamily() == null) { + throw new CustomException("Family id does not exist"); + } + + return scheduleRepository.getTodaySchedule(userService.getUser().getFamily().getId(), LocalDate.now()) + .stream() + .map(e -> {return ScheduleDTO.entityToDTO(e);}) + .collect(Collectors.toList()); + + } +} From b4254b1c791ca644eac8b024096390a92d419443 Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 16:28:18 +0900 Subject: [PATCH 08/16] =?UTF-8?q?[FEAT]=20=EB=A7=88=EC=A7=80=EB=A7=89=20ap?= =?UTF-8?q?i=ED=98=B8=EC=B6=9C=EC=8B=9C=EA=B0=84=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/SpringSecurityConfig.java | 4 +++- .../withparents/entity/LastApiCallTime.java | 24 +++++++++++++++++++ .../filter/JwtAuthorizationFilter.java | 6 +++++ .../repository/LastApiCallTimeRepository.java | 7 ++++++ 4 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/sswugdsc4a/withparents/entity/LastApiCallTime.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/repository/LastApiCallTimeRepository.java diff --git a/src/main/java/com/sswugdsc4a/withparents/config/SpringSecurityConfig.java b/src/main/java/com/sswugdsc4a/withparents/config/SpringSecurityConfig.java index 0048ca1..e5d621c 100644 --- a/src/main/java/com/sswugdsc4a/withparents/config/SpringSecurityConfig.java +++ b/src/main/java/com/sswugdsc4a/withparents/config/SpringSecurityConfig.java @@ -1,6 +1,7 @@ package com.sswugdsc4a.withparents.config; import com.sswugdsc4a.withparents.filter.JwtAuthorizationFilter; +import com.sswugdsc4a.withparents.repository.LastApiCallTimeRepository; import com.sswugdsc4a.withparents.repository.UserRepository; import lombok.RequiredArgsConstructor; import org.springframework.boot.autoconfigure.security.servlet.PathRequest; @@ -19,6 +20,7 @@ public class SpringSecurityConfig extends WebSecurityConfigurerAdapter { private final PropertyConfig propertyConfig; private final UserRepository userRepository; + private final LastApiCallTimeRepository lastApiCallTimeRepository; @Override protected void configure(HttpSecurity http) throws Exception { @@ -32,7 +34,7 @@ protected void configure(HttpSecurity http) throws Exception { // jwt 필터 추가 http.addFilterAfter( - new JwtAuthorizationFilter(userRepository, propertyConfig), + new JwtAuthorizationFilter(userRepository, lastApiCallTimeRepository, propertyConfig), BasicAuthenticationFilter.class ); diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/LastApiCallTime.java b/src/main/java/com/sswugdsc4a/withparents/entity/LastApiCallTime.java new file mode 100644 index 0000000..ab9fb9c --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/LastApiCallTime.java @@ -0,0 +1,24 @@ +package com.sswugdsc4a.withparents.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.time.LocalDateTime; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class LastApiCallTime { + + @Id + private Long userId; + + private LocalDateTime lastApiCallTime; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/filter/JwtAuthorizationFilter.java b/src/main/java/com/sswugdsc4a/withparents/filter/JwtAuthorizationFilter.java index a2261a7..4d4cc5f 100644 --- a/src/main/java/com/sswugdsc4a/withparents/filter/JwtAuthorizationFilter.java +++ b/src/main/java/com/sswugdsc4a/withparents/filter/JwtAuthorizationFilter.java @@ -1,8 +1,10 @@ package com.sswugdsc4a.withparents.filter; import com.sswugdsc4a.withparents.config.PropertyConfig; +import com.sswugdsc4a.withparents.entity.LastApiCallTime; import com.sswugdsc4a.withparents.entity.User; import com.sswugdsc4a.withparents.exception.CustomException; +import com.sswugdsc4a.withparents.repository.LastApiCallTimeRepository; import com.sswugdsc4a.withparents.repository.UserRepository; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.security.Keys; @@ -18,12 +20,14 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.nio.charset.StandardCharsets; +import java.time.LocalDateTime; import java.util.Optional; @RequiredArgsConstructor public class JwtAuthorizationFilter extends OncePerRequestFilter { private final UserRepository userRepository; + private final LastApiCallTimeRepository lastApiCallTimeRepository; private final PropertyConfig propertyConfig; @Override @@ -67,6 +71,8 @@ protected void doFilterInternal( SecurityContextHolder.getContext().setAuthentication(authentication); + lastApiCallTimeRepository.save(new LastApiCallTime(user.get().getId(), LocalDateTime.now())); + }catch (Exception e){ } diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/LastApiCallTimeRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/LastApiCallTimeRepository.java new file mode 100644 index 0000000..a8fc99a --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/repository/LastApiCallTimeRepository.java @@ -0,0 +1,7 @@ +package com.sswugdsc4a.withparents.repository; + +import com.sswugdsc4a.withparents.entity.LastApiCallTime; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface LastApiCallTimeRepository extends JpaRepository { +} From 6980b1318822077fae5d1d0618017b7c4e458148 Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 16:39:19 +0900 Subject: [PATCH 09/16] =?UTF-8?q?[FEAT]=20getParentsLastApiCallTime=20api?= =?UTF-8?q?=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../withparents/controller/UserController.java | 6 ++++++ .../withparents/service/UserService.java | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java index 9713d73..52fd65f 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/UserController.java @@ -4,6 +4,7 @@ import com.sswugdsc4a.withparents.dto.request.user.CreateFamilyRequest; import com.sswugdsc4a.withparents.dto.request.user.ModifyUserInfoRequest; import com.sswugdsc4a.withparents.dto.request.user.SetLocationInfoRequest; +import com.sswugdsc4a.withparents.entity.LastApiCallTime; import com.sswugdsc4a.withparents.service.UserService; import lombok.RequiredArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -62,4 +63,9 @@ public List getFamilyMemberIdList(){ return userService.getFamilyMemberList(); } + @GetMapping("/api/user/getParentsLastApiCallTime") + public List getParentsLastApiCallTime(){ + return userService.getParentsLastApiCallTime(); + } + } diff --git a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java index ca6fb48..d429ef7 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java @@ -2,10 +2,12 @@ import com.sswugdsc4a.withparents.dto.dto.user.*; import com.sswugdsc4a.withparents.entity.Family; +import com.sswugdsc4a.withparents.entity.LastApiCallTime; import com.sswugdsc4a.withparents.entity.LocationInfo; import com.sswugdsc4a.withparents.entity.User; import com.sswugdsc4a.withparents.exception.CustomException; import com.sswugdsc4a.withparents.repository.FamilyRepository; +import com.sswugdsc4a.withparents.repository.LastApiCallTimeRepository; import com.sswugdsc4a.withparents.repository.LocationInfoRepository; import com.sswugdsc4a.withparents.repository.UserRepository; import lombok.RequiredArgsConstructor; @@ -23,6 +25,7 @@ public class UserService { private final UserRepository userRepository; private final FamilyRepository familyRepository; private final LocationInfoRepository locationInfoRepository; + private final LastApiCallTimeRepository lastApiCallTimeRepository; public User getUser(){ String userId = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -193,4 +196,19 @@ public List getFamilyMemberList(){ } + public List getParentsLastApiCallTime() { + + User user = getUser(); + + if (user.getFamily() == null) { + throw new CustomException("Family id does not exist"); + } + + return userRepository.getParents(user.getFamily().getId()) + .stream() + .map(e -> lastApiCallTimeRepository.findById(e.getId()) + .orElse(new LastApiCallTime(e.getId(), null))) + .collect(Collectors.toList()); + + } } From f4a25539448cac246eb40b9d867a3a676d16e2cf Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 17:04:51 +0900 Subject: [PATCH 10/16] =?UTF-8?q?[FEAT]=20Photo=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0,=20=EB=A0=88=ED=8C=8C=EC=A7=80=ED=86=A0=EB=A6=AC,=20d?= =?UTF-8?q?to,=20=EC=84=9C=EB=B9=84=EC=8A=A4,=20=EC=BB=A8=ED=8A=B8?= =?UTF-8?q?=EB=A1=A4=EB=9F=AC=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PhotoController.java | 13 +++++++ .../withparents/dto/dto/photo/PhotoDTO.java | 33 +++++++++++++++++ .../sswugdsc4a/withparents/entity/Photo.java | 37 +++++++++++++++++++ .../repository/PhotoRepository.java | 7 ++++ .../withparents/service/PhotoService.java | 4 ++ 5 files changed, 94 insertions(+) create mode 100644 src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/dto/photo/PhotoDTO.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/entity/Photo.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java create mode 100644 src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java b/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java new file mode 100644 index 0000000..d9128b3 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java @@ -0,0 +1,13 @@ +package com.sswugdsc4a.withparents.controller; + +import com.sswugdsc4a.withparents.service.PhotoService; +import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequiredArgsConstructor +public class PhotoController { + + private final PhotoService photoService; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/photo/PhotoDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/photo/PhotoDTO.java new file mode 100644 index 0000000..bebedd7 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/photo/PhotoDTO.java @@ -0,0 +1,33 @@ +package com.sswugdsc4a.withparents.dto.dto.photo; + +import com.sswugdsc4a.withparents.entity.Photo; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDateTime; + +@Getter +@Setter +@AllArgsConstructor +public class PhotoDTO { + + private Long id; + private Long creatorId; + private String creatorName; + private String imageUrl; + private String description; + private LocalDateTime regDate; + + public static PhotoDTO entityToDto(Photo e){ + return new PhotoDTO( + e.getId(), + e.getCreator().getId(), + e.getCreator().getNickname(), + e.getImageUrl(), + e.getDescription(), + e.getRegDate() + ); + } + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java b/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java new file mode 100644 index 0000000..b322ba6 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java @@ -0,0 +1,37 @@ +package com.sswugdsc4a.withparents.entity; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.data.annotation.CreatedDate; +import org.springframework.data.jpa.domain.support.AuditingEntityListener; + +import javax.persistence.*; +import java.time.LocalDateTime; + +@Entity +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@EntityListeners(AuditingEntityListener.class) +public class Photo { + + @Id + @Column(name = "family_id") + @GeneratedValue(strategy=GenerationType.IDENTITY) + private Long id; + + @OneToOne + @JoinColumn(name = "creator_id") + private User creator; + + private String imageUrl; + + private String description; + + @CreatedDate + private LocalDateTime regDate; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java new file mode 100644 index 0000000..fe49db0 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java @@ -0,0 +1,7 @@ +package com.sswugdsc4a.withparents.repository; + +import com.sswugdsc4a.withparents.entity.Photo; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface PhotoRepository extends JpaRepository { +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java new file mode 100644 index 0000000..36152b5 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java @@ -0,0 +1,4 @@ +package com.sswugdsc4a.withparents.service; + +public class PhotoService { +} From 31d15c9b6f5a8ff09a7ca882e335301cd667ecb7 Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 17:18:50 +0900 Subject: [PATCH 11/16] =?UTF-8?q?[FEAT]=20uploadPhoto=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/PhotoController.java | 14 ++++++++ .../Request/gallery/UploadPhotoRequest.java | 11 ++++++ .../withparents/service/PhotoService.java | 34 +++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/Request/gallery/UploadPhotoRequest.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java b/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java index d9128b3..36c3c6e 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/PhotoController.java @@ -1,7 +1,11 @@ package com.sswugdsc4a.withparents.controller; +import com.sswugdsc4a.withparents.dto.dto.photo.PhotoDTO; +import com.sswugdsc4a.withparents.dto.request.gallery.UploadPhotoRequest; import com.sswugdsc4a.withparents.service.PhotoService; import lombok.RequiredArgsConstructor; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController @@ -10,4 +14,14 @@ public class PhotoController { private final PhotoService photoService; + @PostMapping("/api/gallery/uploadPhoto") + public PhotoDTO uploadPhoto( + @RequestBody UploadPhotoRequest body + ){ + return photoService.uploadPhoto( + body.getImageUrl(), + body.getDescription() + ); + } + } diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/gallery/UploadPhotoRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/gallery/UploadPhotoRequest.java new file mode 100644 index 0000000..53c76f0 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/gallery/UploadPhotoRequest.java @@ -0,0 +1,11 @@ +package com.sswugdsc4a.withparents.dto.request.gallery; + +import lombok.Getter; + +@Getter +public class UploadPhotoRequest { + + private String imageUrl; + private String description; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java index 36152b5..b2a2f03 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java @@ -1,4 +1,38 @@ package com.sswugdsc4a.withparents.service; +import com.sswugdsc4a.withparents.dto.dto.photo.PhotoDTO; +import com.sswugdsc4a.withparents.entity.Photo; +import com.sswugdsc4a.withparents.entity.User; +import com.sswugdsc4a.withparents.exception.CustomException; +import com.sswugdsc4a.withparents.repository.PhotoRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; + +@Service +@RequiredArgsConstructor public class PhotoService { + + private final PhotoRepository photoRepository; + private final UserService userService; + + public PhotoDTO uploadPhoto( + String imageUrl, + String description + ){ + User user = userService.getUser(); + + if (userService.getUser().getFamily() == null) { + throw new CustomException("Family id does not exist"); + } + + return PhotoDTO.entityToDto( + photoRepository.save(new Photo( + null, + user, + imageUrl, + description, + null + )) + ); + } } From efe060cb1e2dcfa59f7d4f40ad77ac6a5b5d1e9e Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 17:52:00 +0900 Subject: [PATCH 12/16] =?UTF-8?q?[FIX]=20photo=20=EC=97=94=ED=8B=B0?= =?UTF-8?q?=ED=8B=B0=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/sswugdsc4a/withparents/entity/Photo.java | 6 +++++- .../com/sswugdsc4a/withparents/service/PhotoService.java | 1 + 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java b/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java index b322ba6..737806c 100644 --- a/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Photo.java @@ -19,7 +19,7 @@ public class Photo { @Id - @Column(name = "family_id") + @Column(name = "photo_id") @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @@ -27,6 +27,10 @@ public class Photo { @JoinColumn(name = "creator_id") private User creator; + @ManyToOne + @JoinColumn(name = "family_id") + private Family family; + private String imageUrl; private String description; diff --git a/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java index b2a2f03..ed19337 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/PhotoService.java @@ -29,6 +29,7 @@ public PhotoDTO uploadPhoto( photoRepository.save(new Photo( null, user, + user.getFamily(), imageUrl, description, null From 7e4a222e7070b5e7e3f7d871dd2fd9017078bd14 Mon Sep 17 00:00:00 2001 From: yooputer Date: Sat, 25 Feb 2023 18:01:52 +0900 Subject: [PATCH 13/16] =?UTF-8?q?[FEAT]=20getHomeInfo=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../withparents/dto/dto/user/HomeInfoDTO.java | 5 ++- .../repository/PhotoRepository.java | 9 ++++++ .../withparents/service/UserService.java | 31 ++++++++++++++----- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java index 166971e..298bc20 100644 --- a/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java +++ b/src/main/java/com/sswugdsc4a/withparents/dto/dto/user/HomeInfoDTO.java @@ -1,6 +1,8 @@ package com.sswugdsc4a.withparents.dto.dto.user; +import com.sswugdsc4a.withparents.dto.dto.ScheduleDTO; import com.sswugdsc4a.withparents.dto.dto.medication.MedicationDTO; +import com.sswugdsc4a.withparents.dto.dto.photo.PhotoDTO; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; @@ -14,6 +16,7 @@ public class HomeInfoDTO { private List userList; private List todayMedicationList; - // TODO: 오늘의 일정, 최신 포스팅 추가 + private List todayScheduleList; + private List recentPhotoList; } diff --git a/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java b/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java index fe49db0..375ab5f 100644 --- a/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java +++ b/src/main/java/com/sswugdsc4a/withparents/repository/PhotoRepository.java @@ -2,6 +2,15 @@ import com.sswugdsc4a.withparents.entity.Photo; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; + +import java.util.List; public interface PhotoRepository extends JpaRepository { + + @Query(value = "select * from photo where family_id = ?1 " + + "limit 5 ;" + , nativeQuery = true) + List getRecentPhotos(Long familyId); + } diff --git a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java index 5a7a52a..2e1f320 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/UserService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/UserService.java @@ -1,22 +1,21 @@ package com.sswugdsc4a.withparents.service; +import com.sswugdsc4a.withparents.dto.dto.ScheduleDTO; import com.sswugdsc4a.withparents.dto.dto.medication.MedicationDTO; +import com.sswugdsc4a.withparents.dto.dto.photo.PhotoDTO; import com.sswugdsc4a.withparents.dto.dto.user.*; import com.sswugdsc4a.withparents.entity.Family; import com.sswugdsc4a.withparents.entity.LastApiCallTime; import com.sswugdsc4a.withparents.entity.LocationInfo; import com.sswugdsc4a.withparents.entity.User; import com.sswugdsc4a.withparents.exception.CustomException; -import com.sswugdsc4a.withparents.repository.FamilyRepository; -import com.sswugdsc4a.withparents.repository.LastApiCallTimeRepository; -import com.sswugdsc4a.withparents.repository.LocationInfoRepository; -import com.sswugdsc4a.withparents.repository.MedicationRepository; -import com.sswugdsc4a.withparents.repository.UserRepository; +import com.sswugdsc4a.withparents.repository.*; import lombok.RequiredArgsConstructor; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Service; import javax.transaction.Transactional; +import java.time.LocalDate; import java.util.Calendar; import java.util.List; import java.util.stream.Collectors; @@ -30,6 +29,8 @@ public class UserService { private final LocationInfoRepository locationInfoRepository; private final MedicationRepository medicationRepository; private final LastApiCallTimeRepository lastApiCallTimeRepository; + private final ScheduleRepository scheduleRepository; + private final PhotoRepository photoRepository; public User getUser(){ String userId = SecurityContextHolder.getContext().getAuthentication().getName(); @@ -205,8 +206,8 @@ public HomeInfoDTO getHomeInfo() { HomeInfoDTO response = new HomeInfoDTO(); response.setUserList(getFamilyMemberList()); response.setTodayMedicationList(getTodayMedicationList()); - - // TODO: 오늘의 일정, 최신 포스팅 추가 + response.setTodayScheduleList(getTodayScheduleList()); + response.setRecentPhotoList(getRecentPhotoList()); return response; @@ -235,6 +236,22 @@ private List getTodayMedicationList() { } + private List getTodayScheduleList(){ + + return scheduleRepository.getTodaySchedule(getUser().getFamily().getId(), LocalDate.now()) + .stream() + .map(e -> {return ScheduleDTO.entityToDTO(e);}) + .collect(Collectors.toList()); + + } + + private List getRecentPhotoList(){ + return photoRepository.getRecentPhotos(getUser().getFamily().getId()) + .stream() + .map(e -> PhotoDTO.entityToDto(e)) + .collect(Collectors.toList()); + } + public List getParentsLastApiCallTime() { User user = getUser(); From 27539c26396726f67ccf4112b8013372b8bc6e39 Mon Sep 17 00:00:00 2001 From: 0gonge Date: Fri, 3 Mar 2023 02:32:53 +0900 Subject: [PATCH 14/16] =?UTF-8?q?[FEAT]Modify=20schedule=20api=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/ScheduleController.java | 14 ++++++++ .../schedule/ModifyScheduleRequest.java | 18 +++++++++++ .../withparents/service/ScheduleService.java | 32 ++++++++++++++++++- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/ModifyScheduleRequest.java diff --git a/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java index cb0459a..f4546c0 100644 --- a/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java +++ b/src/main/java/com/sswugdsc4a/withparents/controller/ScheduleController.java @@ -1,5 +1,6 @@ package com.sswugdsc4a.withparents.controller; +import com.sswugdsc4a.withparents.dto.Request.schedule.ModifyScheduleRequest; import com.sswugdsc4a.withparents.dto.dto.ScheduleDTO; import com.sswugdsc4a.withparents.dto.request.schedule.CreateScheduleRequest; import com.sswugdsc4a.withparents.service.ScheduleService; @@ -24,6 +25,19 @@ public ScheduleDTO createSchedule( body.getNotificationStatus() ); } + @PatchMapping("/api/schedule/modifySchedule") + public ScheduleDTO modifySchedule( + @RequestBody ModifyScheduleRequest body + ){ + return scheduleService.modifySchedule( + body.getScheduleId(), + body.getTitle(), + body.getDate(), + body.getTime(), + body.getNotificationStatus() + ); + } + @GetMapping("/api/schedule/getScheduleList") public List getScheduleList( diff --git a/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/ModifyScheduleRequest.java b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/ModifyScheduleRequest.java new file mode 100644 index 0000000..1c11c14 --- /dev/null +++ b/src/main/java/com/sswugdsc4a/withparents/dto/Request/schedule/ModifyScheduleRequest.java @@ -0,0 +1,18 @@ +package com.sswugdsc4a.withparents.dto.Request.schedule; + + +import lombok.Getter; + +import java.time.LocalDate; +import java.time.LocalTime; + +@Getter +public class ModifyScheduleRequest { + + private Long scheduleId; + private String title; + private LocalDate date; + private LocalTime time; + private Boolean notificationStatus; + +} diff --git a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java index 7519a28..a4b118e 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.stream.Collectors; + @Service @RequiredArgsConstructor public class ScheduleService { @@ -27,7 +28,6 @@ public ScheduleDTO createSchedule( LocalTime time, Boolean notificationStatus ) { - if (userService.getUser().getFamily() == null) { throw new CustomException("Family id does not exist"); } @@ -48,6 +48,36 @@ public ScheduleDTO createSchedule( ); } + @Transactional + public ScheduleDTO modifySchedule( + Long scheduleId, + String title, + LocalDate date, + LocalTime time, + Boolean notificationStatus + ){ + Schedule schedule = scheduleRepository.findById(scheduleId) + .orElseThrow(() -> new CustomException("invalid schedule id")); + + if (!userService.areTheyAFamily(schedule.getCreator().getId())){ + throw new CustomException("Family id is different"); + } + if(title != null){ + schedule.setTitle(title); + } + if(date != null){ + schedule.setDate(date); + } + if(time != null){ + schedule.setTime(time); + } + if(notificationStatus != null){ + schedule.setNotificationState(notificationStatus); + } + return ScheduleDTO.entityToDTO(schedule); + + } + @Transactional public void deleteSchedule( Long scheduleId From b6cdcbd67dd04670d3b56e637f37c3d216f06377 Mon Sep 17 00:00:00 2001 From: 0gonge Date: Mon, 13 Mar 2023 19:45:24 +0900 Subject: [PATCH 15/16] =?UTF-8?q?[FIX]=20Schedule=20create=EC=8B=9C,=20nul?= =?UTF-8?q?l=EA=B0=92=EC=9D=B4=20=EC=A1=B4=EC=9E=AC=ED=95=A0=20=EB=95=8C?= =?UTF-8?q?=20=EC=98=A4=EB=A5=98=EC=B2=98=EB=A6=AC=20/=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../withparents/service/ScheduleService.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java index a4b118e..14fd216 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Service; import javax.transaction.Transactional; +import java.time.DateTimeException; import java.time.LocalDate; import java.time.LocalTime; import java.util.List; @@ -31,7 +32,15 @@ public ScheduleDTO createSchedule( if (userService.getUser().getFamily() == null) { throw new CustomException("Family id does not exist"); } - + if (title.isEmpty()){ + throw new CustomException("Please enter a title"); + } + if (date == null){ + throw new DateTimeException("Please enter the date"); + } + if(time == null){ + throw new DateTimeException("Please enter the time"); + } return ScheduleDTO.entityToDTO( scheduleRepository.save( new Schedule( @@ -43,8 +52,11 @@ public ScheduleDTO createSchedule( date, time, notificationStatus + ) + ) + ); } @@ -106,6 +118,7 @@ public List getScheduleList( .stream() .map(e -> {return ScheduleDTO.entityToDTO(e);}) .collect(Collectors.toList()); + } public List getTodayScheduleList(){ From 144964a06472c2b84b5c263b8fbb8ed5f77fcef3 Mon Sep 17 00:00:00 2001 From: 0gonge Date: Mon, 20 Mar 2023 03:59:25 +0900 Subject: [PATCH 16/16] =?UTF-8?q?[FIX]=20schedule=20=EC=83=9D=EC=84=B1=20?= =?UTF-8?q?=EC=8B=9C,=20=EB=8B=89=EB=84=A4=EC=9E=84=20=EB=B0=98=ED=99=98?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java | 1 + .../com/sswugdsc4a/withparents/service/ScheduleService.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java index 4de8261..e09dc45 100644 --- a/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java +++ b/src/main/java/com/sswugdsc4a/withparents/entity/Schedule.java @@ -37,4 +37,5 @@ public class Schedule{ private LocalDate date; private LocalTime time; private Boolean notificationState; + private String nickname; } diff --git a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java index 14fd216..a1f926b 100644 --- a/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java +++ b/src/main/java/com/sswugdsc4a/withparents/service/ScheduleService.java @@ -51,8 +51,8 @@ public ScheduleDTO createSchedule( title, date, time, - notificationStatus - + notificationStatus, + null ) )