From 7ef5ba71c88f7e719e23d838b02bdecc3e432c54 Mon Sep 17 00:00:00 2001 From: slolee Date: Sat, 3 Sep 2022 20:40:28 +0900 Subject: [PATCH 01/10] =?UTF-8?q?Refactor:=20=EC=9D=B8=EC=A6=9D=20&=20?= =?UTF-8?q?=EC=B1=84=ED=8C=85=20=EA=B4=80=EB=A0=A8=20Entity=20=EC=B5=9C?= =?UTF-8?q?=EC=8B=A0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/BloodDonationDetail.java | 9 +++++ .../entity/BloodDonationHistory.java | 23 ++++++++---- .../zoopi/domain/chat/entity/ChatMessage.java | 22 +++++++++-- .../zoopi/domain/chat/entity/ChatRoom.java | 13 ++++++- .../domain/chat/entity/ThanksMessage.java | 37 ------------------- .../domain/hospital/entity/Hospital.java | 2 + 6 files changed, 56 insertions(+), 50 deletions(-) delete mode 100644 module-domain/src/main/java/com/zoopi/domain/chat/entity/ThanksMessage.java diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java index 0731066..e405e30 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java @@ -2,17 +2,22 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.OneToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter public class BloodDonationDetail extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -23,4 +28,8 @@ public class BloodDonationDetail extends BaseEntity { private String message; + @OneToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "blood_donation_history_id", referencedColumnName = "blood_donation_history_id") + private BloodDonationHistory history; + } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java index 523321a..e35d1cd 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java @@ -11,35 +11,42 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; +import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; +import com.zoopi.domain.hospital.entity.Hospital; +import com.zoopi.domain.pet.entity.Pet; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter public class BloodDonationHistory extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "blood_donation_history_id") private Long id; - private Long petId; - private Long receiverPetId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "pet_id", referencedColumnName = "pet_id") + private Pet pet; - @OneToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "blood_donation_detail_id") - private BloodDonationDetail detail; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_pet_id", referencedColumnName = "receiver_pet_id") + private Pet receiverPet; - @Column(name = "image") private String imageUrl; - private Long hospitalId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "hospital_id", referencedColumnName = "hospital_id") + private Hospital hospital; private LocalDate bloodDonationAt; @Enumerated(EnumType.STRING) private BloodDonationType type; + } diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java index 57184d1..01f663e 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java @@ -2,34 +2,48 @@ import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.EnumType; +import javax.persistence.Enumerated; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; enum MessageType { - GENERAL + GENERAL, THANKS } @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter public class ChatMessage extends BaseEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) + @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "chat_message_id") private Long id; - private Long chatRoomId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "chat_room_id", referencedColumnName = "chat_room_id") + private ChatRoom chatRoom; + + // TODO : 연관관계 줄지말지에 대해 고민 private Long senderId; + private String message; + + @Enumerated(EnumType.STRING) private MessageType type; + private Boolean readFlag; } \ No newline at end of file diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java index 739d538..ce09363 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java @@ -4,26 +4,37 @@ import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; +import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; +import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; +import com.zoopi.domain.pet.entity.Pet; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter public class ChatRoom extends BaseEntity { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "chat_room_id") private Long id; + // @ManyToOne(fetch = FetchType.LAZY) + // @JoinColumn(name = "post_id", referencedColumnName = "post_id") private Long postId; - private Long bloodDonorId; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "donor_id", referencedColumnName = "donor_id") + private Pet donor; + private Boolean alarmFlag; @Enumerated(EnumType.STRING) diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ThanksMessage.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ThanksMessage.java deleted file mode 100644 index 5768b26..0000000 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ThanksMessage.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.zoopi.domain.chat.entity; - -import java.time.LocalDateTime; - -import javax.persistence.Column; -import javax.persistence.Entity; -import javax.persistence.FetchType; -import javax.persistence.GeneratedValue; -import javax.persistence.GenerationType; -import javax.persistence.Id; -import javax.persistence.JoinColumn; -import javax.persistence.OneToOne; - -import lombok.AccessLevel; -import lombok.NoArgsConstructor; - -import com.zoopi.domain.BaseEntity; - -@Entity -@NoArgsConstructor(access = AccessLevel.PROTECTED) -public class ThanksMessage extends BaseEntity { - - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "thanks_message_id") - private Long id; - - @OneToOne(fetch = FetchType.EAGER) - @JoinColumn(name = "chat_room_id") - private ChatRoom chatRoom; - - private Long hospitalId; - private LocalDateTime bloodReceiveAt; - - private String message; - -} diff --git a/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java b/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java index a07c3ff..191aa7e 100644 --- a/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java +++ b/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java @@ -7,10 +7,12 @@ import javax.persistence.Id; import lombok.AccessLevel; +import lombok.Getter; import lombok.NoArgsConstructor; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@Getter public class Hospital { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) From 30ae33dd1d802a4531f3afd2f40f1857ff3f0db2 Mon Sep 17 00:00:00 2001 From: slolee Date: Sun, 11 Sep 2022 15:00:31 +0900 Subject: [PATCH 02/10] =?UTF-8?q?Refactor:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=20=ED=8C=8C=EC=9D=BC=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BloodDonationCertReadRepository.java | 19 --------- .../BloodDonationCertRepository.java | 10 ----- .../dto/AppointBloodDonationCertDto.java | 41 ------------------- 3 files changed, 70 deletions(-) delete mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertReadRepository.java delete mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertRepository.java delete mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/dto/AppointBloodDonationCertDto.java diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertReadRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertReadRepository.java deleted file mode 100644 index 603ec3d..0000000 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertReadRepository.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.zoopi.domain.certification.repository; - -import org.springframework.stereotype.Repository; - -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; - -@Repository -@RequiredArgsConstructor -public class BloodDonationCertReadRepository { - - private final JPAQueryFactory queryFactory; - -// public List findAppointBloodDonationCerts(Long petId) { -// QBloodDonationHistory bloodDonationHistory = QBloodDonationHistory.bloodDonationHistory; -// QBloodDonationDetail bloodDonationDetail = QBloodDonationDetail.bloodDonationDetail; -// } -} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertRepository.java deleted file mode 100644 index a61afec..0000000 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationCertRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.zoopi.domain.certification.repository; - -import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.stereotype.Repository; - -import com.zoopi.domain.certification.entity.BloodDonationHistory; - -@Repository -public interface BloodDonationCertRepository extends JpaRepository { -} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/dto/AppointBloodDonationCertDto.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/dto/AppointBloodDonationCertDto.java deleted file mode 100644 index d73f419..0000000 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/dto/AppointBloodDonationCertDto.java +++ /dev/null @@ -1,41 +0,0 @@ -package com.zoopi.domain.certification.repository.dto; - -import java.time.LocalDate; - -import com.querydsl.core.annotations.QueryProjection; - -import lombok.Data; - -@Data -public class AppointBloodDonationCertDto { - private final Long bloodDonationHistoryId; - - private final String receiverPetName; - private final String receiverPetImageUrl; - private final String thanksMessage; - - private final String imageUrl; - private final LocalDate bloodDonationAt; - private final String hospitalName; - - @QueryProjection - public AppointBloodDonationCertDto( - Long bloodDonationHistoryId, - - String receiverPetName, - String receiverPetImageUrl, - String thanksMessage, - - String imageUrl, - LocalDate bloodDonationAt, - String hospitalName - ) { - this.bloodDonationHistoryId = bloodDonationHistoryId; - this.receiverPetName = receiverPetName; - this.receiverPetImageUrl = receiverPetImageUrl; - this.thanksMessage = thanksMessage; - this.imageUrl = imageUrl; - this.bloodDonationAt = bloodDonationAt; - this.hospitalName = hospitalName; - } -} From 9532e6979b99d82ba8523df1acb18aedba6a5089 Mon Sep 17 00:00:00 2001 From: slolee Date: Sun, 11 Sep 2022 15:10:30 +0900 Subject: [PATCH 03/10] =?UTF-8?q?Refactor:=20referencedColumnName=20?= =?UTF-8?q?=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/certification/service/BloodDonationCertService.java | 2 -- .../zoopi/domain/certification/entity/BloodDonationHistory.java | 2 +- .../src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java b/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java index 5b650a8..afde8da 100644 --- a/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java +++ b/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java @@ -4,11 +4,9 @@ import lombok.RequiredArgsConstructor; -import com.zoopi.domain.certification.repository.BloodDonationCertRepository; @Service @RequiredArgsConstructor public class BloodDonationCertService { - private final BloodDonationCertRepository certRepository; } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java index e35d1cd..fc82960 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java @@ -35,7 +35,7 @@ public class BloodDonationHistory extends BaseEntity { private Pet pet; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "receiver_pet_id", referencedColumnName = "receiver_pet_id") + @JoinColumn(name = "receiver_pet_id", referencedColumnName = "pet_id") private Pet receiverPet; private String imageUrl; diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java index ce09363..050ec70 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java @@ -32,7 +32,7 @@ public class ChatRoom extends BaseEntity { private Long postId; @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "donor_id", referencedColumnName = "donor_id") + @JoinColumn(name = "donor_id", referencedColumnName = "pet_id") private Pet donor; private Boolean alarmFlag; From 7381a5ddb184e1d077ee2165d19c9fd605fc1b91 Mon Sep 17 00:00:00 2001 From: slolee Date: Mon, 12 Sep 2022 01:01:20 +0900 Subject: [PATCH 04/10] =?UTF-8?q?Feat:=20=ED=97=8C=ED=98=88=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EB=82=B4=EC=97=AD=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EA=B0=9C=EB=B0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../BloodDonationCertController.java | 9 +- .../service/BloodDonationCertService.java | 16 ++++ .../service/CertificationServiceTest.java | 82 +++++++++++++++++++ .../java/com/zoopi/util/FunctionalUtils.java | 25 ++++++ .../certification/dto/CertDetailDto.java | 28 +++++++ .../entity/BloodDonationDetail.java | 8 ++ .../entity/BloodDonationHistory.java | 8 +- .../BloodDonationDetailRepository.java | 39 +++++++++ .../BloodDonationHistoryRepository.java | 16 ++++ .../service/CertificationService.java | 49 +++++++++++ .../zoopi/domain/chat/entity/ChatMessage.java | 8 +- .../zoopi/domain/chat/entity/ChatRoom.java | 2 + .../zoopi/domain/chat/entity/MessageType.java | 5 ++ .../repository/ChatMessageRepository.java | 17 ++++ .../domain/hospital/entity/Hospital.java | 2 + .../api/BloodDonationCertApi.java | 2 +- .../model/BloodDonationDetailResponse.java | 27 ++++++ .../model/CertificationResponse.java | 48 +++++++++++ 18 files changed, 376 insertions(+), 15 deletions(-) create mode 100644 module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java create mode 100644 module-common/src/main/java/com/zoopi/util/FunctionalUtils.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/chat/entity/MessageType.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java create mode 100644 module-model/src/main/java/com/zoopi/client/certification/model/BloodDonationDetailResponse.java create mode 100644 module-model/src/main/java/com/zoopi/client/certification/model/CertificationResponse.java diff --git a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java index 68545d7..5a5043f 100644 --- a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java +++ b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java @@ -6,8 +6,9 @@ import lombok.RequiredArgsConstructor; -import com.zoopi.client.certification.api.BloodDonationCertApi; +import com.zoopi.ResultCode; import com.zoopi.ResultResponse; +import com.zoopi.client.certification.api.BloodDonationCertApi; import com.zoopi.client.certification.service.BloodDonationCertService; @RestController @@ -17,8 +18,10 @@ public class BloodDonationCertController implements BloodDonationCertApi { private final BloodDonationCertService certService; @GetMapping("/{petId}") - public ResponseEntity findCertification(Long petId) { - return ResponseEntity.ok(ResultResponse.of(null)); + public ResponseEntity retrieveCertification(Long petId) { + return ResponseEntity.ok( + ResultResponse.of(ResultCode.SIGN_IN_SUCCESS, certService.retrieveCertification(petId)) + ); } } diff --git a/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java b/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java index afde8da..d6be4d3 100644 --- a/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java +++ b/module-application/src/main/java/com/zoopi/client/certification/service/BloodDonationCertService.java @@ -1,12 +1,28 @@ package com.zoopi.client.certification.service; +import java.util.List; +import java.util.stream.Collectors; + import org.springframework.stereotype.Service; import lombok.RequiredArgsConstructor; +import com.zoopi.client.certification.model.CertificationResponse; +import com.zoopi.domain.certification.entity.BloodDonationHistory; +import com.zoopi.domain.certification.service.CertificationService; @Service @RequiredArgsConstructor public class BloodDonationCertService { + private final CertificationService certificationService; + + public List retrieveCertification(Long petId) { + List histories = certificationService.findAllHistoryBy(petId); + return certificationService.mapHistoryAndDetail(histories) + .entrySet().stream() + .map(CertificationResponse::of) + .collect(Collectors.toList()); + } + } diff --git a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java new file mode 100644 index 0000000..797941e --- /dev/null +++ b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java @@ -0,0 +1,82 @@ +package com.zoopi.domain.certification.service; + +import static com.zoopi.domain.certification.entity.BloodDonationType.*; +import static com.zoopi.util.FunctionalUtils.*; +import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.*; + +import java.time.LocalDate; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; + +import org.junit.jupiter.api.Test; + +import com.zoopi.domain.certification.dto.CertDetailDto; +import com.zoopi.domain.certification.entity.BloodDonationDetail; +import com.zoopi.domain.certification.entity.BloodDonationHistory; +import com.zoopi.domain.certification.repository.BloodDonationDetailRepository; +import com.zoopi.domain.certification.repository.BloodDonationHistoryRepository; +import com.zoopi.domain.chat.entity.ChatMessage; +import com.zoopi.domain.chat.entity.ChatRoom; +import com.zoopi.domain.chat.entity.ChatRoomStatus; +import com.zoopi.domain.chat.entity.MessageType; +import com.zoopi.domain.chat.repository.ChatMessageRepository; +import com.zoopi.domain.hospital.entity.Hospital; +import com.zoopi.domain.pet.entity.Pet; + +class CertificationServiceTest { + + private final BloodDonationHistoryRepository historyRepository = mock(BloodDonationHistoryRepository.class); + private final BloodDonationDetailRepository detailRepository = mock(BloodDonationDetailRepository.class); + private final ChatMessageRepository chatMessageRepository = mock(ChatMessageRepository.class); + + private final CertificationService certificationService = new CertificationService( + historyRepository, + detailRepository, + chatMessageRepository + ); + + private final Pet donorPet = Pet.builder().build(); + private final Pet receiverPet = Pet.builder().build(); + private final Hospital hospital1 = new Hospital(1L, "충북대학교 동물병원", "충북 청주시 서원구 충대로1, 충북대학교 수의과대학 동물병원"); + private final Hospital hospital2 = new Hospital(2L, "건국대학교 부속 동물병원", "서울 광진구 능동로 120 건국대학교 수의학관"); + private final List histories = List.of( + new BloodDonationHistory(1L, donorPet, "https://smaple.com/1", hospital1, LocalDate.now(), APPOINT), + new BloodDonationHistory(2L, donorPet, "https://smaple.com/2", hospital2, LocalDate.now(), APPOINT), + new BloodDonationHistory(3L, donorPet, "https://smaple.com/3", hospital2, LocalDate.now(), GENERAL), + new BloodDonationHistory(4L, donorPet, "https://smaple.com/4", hospital2, LocalDate.now(), APPOINT), + new BloodDonationHistory(5L, donorPet, "https://smaple.com/5", hospital1, LocalDate.now(), GENERAL) + ); + private final List details = List.of( + new BloodDonationDetail(1L, receiverPet, 100L, "", histories.get(0)), + new BloodDonationDetail(2L, receiverPet, 200L, "", histories.get(1)), + new BloodDonationDetail(3L, receiverPet, 300L, "", histories.get(3)) + ); + private final ChatRoom chatRoom = new ChatRoom(200L, 2L, donorPet, true, ChatRoomStatus.DONE); + private final ChatMessage chatMessage = new ChatMessage(1000L, chatRoom, 1L, "헌혈해주셔서 감사합니다 :)", MessageType.THANKS, true); + + @Test + public void mapHistoryAndDetail_happy_case() { + // given + when(detailRepository.findByHistoryIdsIn(mapFrom(histories, BloodDonationHistory::getId))).thenReturn(details); + when(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).thenReturn(Optional.empty()); + when(chatMessageRepository.findByChatRoomIdAndType(200L, MessageType.THANKS)).thenReturn(Optional.of(chatMessage)); + when(chatMessageRepository.findByChatRoomIdAndType(300L, MessageType.THANKS)).thenReturn(Optional.empty()); + + // when + final Map res = certificationService.mapHistoryAndDetail(histories); + + // then + res.forEach((history, dto) -> { + if (history.getType().equals(APPOINT)) { + assertNotNull(dto); + if (history.getId() == 2) assertEquals(dto.getThanksMessage(), "헌혈해주셔서 감사합니다 :)"); + else assertNull(dto.getThanksMessage()); + } + else if (history.getType().equals(GENERAL)) assertNull(dto); + }); + } + +} \ No newline at end of file diff --git a/module-common/src/main/java/com/zoopi/util/FunctionalUtils.java b/module-common/src/main/java/com/zoopi/util/FunctionalUtils.java new file mode 100644 index 0000000..7f56675 --- /dev/null +++ b/module-common/src/main/java/com/zoopi/util/FunctionalUtils.java @@ -0,0 +1,25 @@ +package com.zoopi.util; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +public class FunctionalUtils { + + public static List mapFrom(List list, Function func) { + return list.stream().map(func).collect(Collectors.toList()); + } + + public static List filter(List list, Predicate func) { + return list.stream().filter(func).collect(Collectors.toList()); + } + + public static Map associateFrom(List list, Function key, Function value) { + return list.stream().collect(HashMap::new, (map, t) -> map.put(key.apply(t), value.apply(t)), HashMap::putAll); + } + +} + diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java b/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java new file mode 100644 index 0000000..fd3ca1f --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java @@ -0,0 +1,28 @@ +package com.zoopi.domain.certification.dto; + +import java.time.LocalDateTime; + +import lombok.Getter; + +import com.zoopi.domain.certification.entity.BloodDonationDetail; +import com.zoopi.domain.chat.entity.ChatMessage; +import com.zoopi.domain.pet.entity.Pet; + +@Getter +public class CertDetailDto { + + private final Long bloodDonationDetailId; + private final Pet receiverPet; + private String thanksMessage = null; + private LocalDateTime thanksMessageAt = null; + + public CertDetailDto(BloodDonationDetail detail) { + this.bloodDonationDetailId = detail.getId(); + this.receiverPet = detail.getReceiverPet(); + } + + public void setThanksMessage(ChatMessage thanksMessage) { + this.thanksMessage = thanksMessage.getMessage(); + this.thanksMessageAt = thanksMessage.getCreatedAt(); + } +} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java index e405e30..b20724f 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationDetail.java @@ -7,16 +7,20 @@ import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; +import javax.persistence.ManyToOne; import javax.persistence.OneToOne; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; +import com.zoopi.domain.pet.entity.Pet; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor @Getter public class BloodDonationDetail extends BaseEntity { @@ -24,6 +28,10 @@ public class BloodDonationDetail extends BaseEntity { @Column(name = "blood_dontation_detail_id") private Long id; + @ManyToOne(fetch = FetchType.LAZY) + @JoinColumn(name = "receiver_pet_id", referencedColumnName = "pet_id") + private Pet receiverPet; + private Long chatRoomId; private String message; diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java index fc82960..5d3faf5 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/entity/BloodDonationHistory.java @@ -14,6 +14,7 @@ import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -23,6 +24,7 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor @Getter public class BloodDonationHistory extends BaseEntity { @@ -34,10 +36,6 @@ public class BloodDonationHistory extends BaseEntity { @JoinColumn(name = "pet_id", referencedColumnName = "pet_id") private Pet pet; - @ManyToOne(fetch = FetchType.LAZY) - @JoinColumn(name = "receiver_pet_id", referencedColumnName = "pet_id") - private Pet receiverPet; - private String imageUrl; @ManyToOne(fetch = FetchType.LAZY) @@ -49,4 +47,4 @@ public class BloodDonationHistory extends BaseEntity { @Enumerated(EnumType.STRING) private BloodDonationType type; -} +} \ No newline at end of file diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java new file mode 100644 index 0000000..4b9310c --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java @@ -0,0 +1,39 @@ +package com.zoopi.domain.certification.repository; + +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +import com.zoopi.domain.certification.entity.BloodDonationDetail; +import com.zoopi.domain.certification.entity.QBloodDonationDetail; +import com.zoopi.domain.certification.entity.QBloodDonationHistory; +import com.zoopi.domain.chat.entity.QChatMessage; +import com.zoopi.domain.chat.entity.QChatRoom; +import com.zoopi.domain.pet.entity.QPet; + +@Repository +@RequiredArgsConstructor +public class BloodDonationDetailRepository { + + private final JPAQueryFactory jpaQueryFactory; + private final QBloodDonationHistory bloodDonationHistory = QBloodDonationHistory.bloodDonationHistory; + private final QBloodDonationDetail bloodDonationDetail = QBloodDonationDetail.bloodDonationDetail; + private final QPet pet = QPet.pet; + private final QChatRoom chatRoom = QChatRoom.chatRoom; + private final QChatMessage chatMessage = QChatMessage.chatMessage; + + public List findByHistoryIdsIn(List ids) { + return jpaQueryFactory.selectFrom(bloodDonationDetail) + .innerJoin(bloodDonationHistory).on(bloodDonationHistory.id.eq(bloodDonationDetail.history.id)) + .fetchJoin() + .innerJoin(pet).on(pet.id.eq(bloodDonationDetail.receiverPet.id)) + .fetchJoin() + .where(bloodDonationDetail.history.id.in(ids)) + .fetch(); + } + +} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java new file mode 100644 index 0000000..628d122 --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java @@ -0,0 +1,16 @@ +package com.zoopi.domain.certification.repository; + +import java.util.List; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import com.zoopi.domain.certification.entity.BloodDonationHistory; + +@Repository +public interface BloodDonationHistoryRepository extends CrudRepository { + + @Query("select h from BloodDonationHistory h join fetch h.hospital join fetch h.pet where h.pet.id = :petId") + List findAllByPetId(Long petId); +} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java new file mode 100644 index 0000000..7080ba3 --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -0,0 +1,49 @@ +package com.zoopi.domain.certification.service; + +import static com.zoopi.util.FunctionalUtils.*; + +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import lombok.RequiredArgsConstructor; + +import com.zoopi.domain.certification.dto.CertDetailDto; +import com.zoopi.domain.certification.entity.BloodDonationDetail; +import com.zoopi.domain.certification.entity.BloodDonationHistory; +import com.zoopi.domain.certification.repository.BloodDonationDetailRepository; +import com.zoopi.domain.certification.repository.BloodDonationHistoryRepository; +import com.zoopi.domain.chat.entity.MessageType; +import com.zoopi.domain.chat.repository.ChatMessageRepository; + +@Service +@RequiredArgsConstructor +public class CertificationService { + + private final BloodDonationHistoryRepository historyRepository; + private final BloodDonationDetailRepository detailRepository; + private final ChatMessageRepository chatMessageRepository; + + public List findAllHistoryBy(Long petId) { + return historyRepository.findAllByPetId(petId); + } + + @Transactional + public Map mapHistoryAndDetail(List histories) { + final List ids = mapFrom(histories, BloodDonationHistory::getId); + final List details = detailRepository.findByHistoryIdsIn(ids); + final Map certDtoMap = associateFrom( + details, + detail -> detail.getHistory().getId(), + detail -> { + final CertDetailDto detailDto = new CertDetailDto(detail); + chatMessageRepository.findByChatRoomIdAndType(detail.getChatRoomId(), MessageType.THANKS) + .ifPresent(detailDto::setThanksMessage); + return detailDto; + }); + return associateFrom(histories, history -> history, history -> certDtoMap.get(history.getId())); + } + +} diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java index 01f663e..b79670a 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatMessage.java @@ -12,19 +12,15 @@ import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import com.zoopi.domain.BaseEntity; -enum MessageType { - - GENERAL, THANKS - -} - @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor @Getter public class ChatMessage extends BaseEntity { diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java index 050ec70..f5de2b3 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/ChatRoom.java @@ -12,6 +12,7 @@ import javax.persistence.ManyToOne; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @@ -20,6 +21,7 @@ @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor @Getter public class ChatRoom extends BaseEntity { diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/entity/MessageType.java b/module-domain/src/main/java/com/zoopi/domain/chat/entity/MessageType.java new file mode 100644 index 0000000..c4352ab --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/chat/entity/MessageType.java @@ -0,0 +1,5 @@ +package com.zoopi.domain.chat.entity; + +public enum MessageType { + GENERAL, THANKS +} diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java b/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java new file mode 100644 index 0000000..ec72e02 --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java @@ -0,0 +1,17 @@ +package com.zoopi.domain.chat.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.CrudRepository; +import org.springframework.stereotype.Repository; + +import com.zoopi.domain.chat.entity.ChatMessage; +import com.zoopi.domain.chat.entity.MessageType; + +@Repository +public interface ChatMessageRepository extends CrudRepository { + + @Query("select c from ChatMessage c where c.chatRoom.id = :chatRoomId and c.type = :type") + Optional findByChatRoomIdAndType(Long chatRoomId, MessageType type); +} diff --git a/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java b/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java index 191aa7e..7dfc2c1 100644 --- a/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java +++ b/module-domain/src/main/java/com/zoopi/domain/hospital/entity/Hospital.java @@ -7,11 +7,13 @@ import javax.persistence.Id; import lombok.AccessLevel; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor @Getter public class Hospital { diff --git a/module-model/src/main/java/com/zoopi/client/certification/api/BloodDonationCertApi.java b/module-model/src/main/java/com/zoopi/client/certification/api/BloodDonationCertApi.java index cad79df..0f6a9ff 100644 --- a/module-model/src/main/java/com/zoopi/client/certification/api/BloodDonationCertApi.java +++ b/module-model/src/main/java/com/zoopi/client/certification/api/BloodDonationCertApi.java @@ -14,6 +14,6 @@ public interface BloodDonationCertApi { @GetMapping("/{petId}") - ResponseEntity findCertification(@PathVariable Long petId); + ResponseEntity retrieveCertification(@PathVariable Long petId); } diff --git a/module-model/src/main/java/com/zoopi/client/certification/model/BloodDonationDetailResponse.java b/module-model/src/main/java/com/zoopi/client/certification/model/BloodDonationDetailResponse.java new file mode 100644 index 0000000..888c119 --- /dev/null +++ b/module-model/src/main/java/com/zoopi/client/certification/model/BloodDonationDetailResponse.java @@ -0,0 +1,27 @@ +package com.zoopi.client.certification.model; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import com.zoopi.domain.certification.dto.CertDetailDto; + +@Getter +@AllArgsConstructor +@Builder +public class BloodDonationDetailResponse { + + private Long bloodDonationDetailId; + private Long receiverPetId; + private String receiverPetName; + private String thanksMessage; + + public static BloodDonationDetailResponse of(CertDetailDto dto) { + return BloodDonationDetailResponse.builder() + .bloodDonationDetailId(dto.getBloodDonationDetailId()) + .receiverPetId(dto.getReceiverPet().getId()) + .receiverPetName(dto.getReceiverPet().getName()) + .thanksMessage(dto.getThanksMessage()) + .build(); + } +} diff --git a/module-model/src/main/java/com/zoopi/client/certification/model/CertificationResponse.java b/module-model/src/main/java/com/zoopi/client/certification/model/CertificationResponse.java new file mode 100644 index 0000000..c1e0818 --- /dev/null +++ b/module-model/src/main/java/com/zoopi/client/certification/model/CertificationResponse.java @@ -0,0 +1,48 @@ +package com.zoopi.client.certification.model; + +import java.time.LocalDate; +import java.util.Map.Entry; +import java.util.Optional; + +import com.fasterxml.jackson.annotation.JsonInclude; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +import com.zoopi.domain.certification.dto.CertDetailDto; +import com.zoopi.domain.certification.entity.BloodDonationHistory; +import com.zoopi.domain.certification.entity.BloodDonationType; +import com.zoopi.domain.hospital.entity.Hospital; + +@Getter +@AllArgsConstructor +@Builder +public class CertificationResponse { + + private Long bloodDonationHistoryId; + private BloodDonationType type; + private String imageUrl; + private Hospital hospital; + private LocalDate bloodDonationAt; + + @JsonInclude(JsonInclude.Include.NON_NULL) + private BloodDonationDetailResponse detail; + + public static CertificationResponse of(Entry entry) { + final BloodDonationHistory history = entry.getKey(); + final CertDetailDto detailDto = entry.getValue(); + + final BloodDonationDetailResponse detail = Optional.ofNullable(detailDto) + .map(BloodDonationDetailResponse::of).orElse(null); + + return CertificationResponse.builder() + .bloodDonationHistoryId(history.getId()) + .type(history.getType()) + .imageUrl(history.getImageUrl()) + .bloodDonationAt(history.getBloodDonationAt()) + .detail(detail) + .build(); + } + +} From 43afeef35db1308e1aea6dce7c7f89d1961d3917 Mon Sep 17 00:00:00 2001 From: slolee Date: Mon, 12 Sep 2022 01:06:24 +0900 Subject: [PATCH 05/10] =?UTF-8?q?Refactor:=20=ED=97=8C=ED=98=88=EC=9D=B8?= =?UTF-8?q?=EC=A6=9D=20=EB=82=B4=EC=97=AD=20=EC=A1=B0=ED=9A=8C=20API=20?= =?UTF-8?q?=EC=9D=91=EB=8B=B5=20=EC=83=81=ED=83=9C=EC=BD=94=EB=93=9C=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 --- .../certification/controller/BloodDonationCertController.java | 2 +- module-model/src/main/java/com/zoopi/ResultCode.java | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java index 5a5043f..76d40af 100644 --- a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java +++ b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java @@ -20,7 +20,7 @@ public class BloodDonationCertController implements BloodDonationCertApi { @GetMapping("/{petId}") public ResponseEntity retrieveCertification(Long petId) { return ResponseEntity.ok( - ResultResponse.of(ResultCode.SIGN_IN_SUCCESS, certService.retrieveCertification(petId)) + ResultResponse.of(ResultCode.OK, certService.retrieveCertification(petId)) ); } diff --git a/module-model/src/main/java/com/zoopi/ResultCode.java b/module-model/src/main/java/com/zoopi/ResultCode.java index 72db235..d5afbfb 100644 --- a/module-model/src/main/java/com/zoopi/ResultCode.java +++ b/module-model/src/main/java/com/zoopi/ResultCode.java @@ -7,6 +7,9 @@ @AllArgsConstructor public enum ResultCode { + // Common + OK(200, "-200", ""), + // Member USERNAME_AVAILABLE(200, "R-M001", "사용 가능한 아이디입니다."), USERNAME_EXISTENT(200, "R-M002", "존재하는 아이디입니다."), From 435eb0086bbfa76cb0ae10523a95ef37f0fc8e36 Mon Sep 17 00:00:00 2001 From: slolee Date: Mon, 12 Sep 2022 01:39:20 +0900 Subject: [PATCH 06/10] =?UTF-8?q?Refactor:=20CertificationService=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CertificationService.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java index 7080ba3..42a8524 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -4,6 +4,7 @@ import java.util.List; import java.util.Map; +import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -34,16 +35,14 @@ public List findAllHistoryBy(Long petId) { public Map mapHistoryAndDetail(List histories) { final List ids = mapFrom(histories, BloodDonationHistory::getId); final List details = detailRepository.findByHistoryIdsIn(ids); - final Map certDtoMap = associateFrom( - details, - detail -> detail.getHistory().getId(), - detail -> { - final CertDetailDto detailDto = new CertDetailDto(detail); - chatMessageRepository.findByChatRoomIdAndType(detail.getChatRoomId(), MessageType.THANKS) - .ifPresent(detailDto::setThanksMessage); - return detailDto; - }); - return associateFrom(histories, history -> history, history -> certDtoMap.get(history.getId())); + return associateFrom(details, BloodDonationDetail::getHistory, this::makeCertDetailDto); + } + + public CertDetailDto makeCertDetailDto(BloodDonationDetail detail) { + final CertDetailDto detailDto = new CertDetailDto(detail); + chatMessageRepository.findByChatRoomIdAndType(detail.getChatRoomId(), MessageType.THANKS) + .ifPresent(detailDto::setThanksMessage); + return detailDto; } } From e2109dfdbf453905fd61441b213ba442a70413d1 Mon Sep 17 00:00:00 2001 From: slolee Date: Mon, 12 Sep 2022 01:51:40 +0900 Subject: [PATCH 07/10] =?UTF-8?q?Refactor:=20CertificationService=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../certification/service/CertificationServiceTest.java | 1 - .../domain/certification/service/CertificationService.java | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java index 797941e..c887079 100644 --- a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java +++ b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java @@ -8,7 +8,6 @@ import java.time.LocalDate; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import org.junit.jupiter.api.Test; diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java index 42a8524..fe55581 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.Map; -import java.util.stream.Collectors; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,7 +34,10 @@ public List findAllHistoryBy(Long petId) { public Map mapHistoryAndDetail(List histories) { final List ids = mapFrom(histories, BloodDonationHistory::getId); final List details = detailRepository.findByHistoryIdsIn(ids); - return associateFrom(details, BloodDonationDetail::getHistory, this::makeCertDetailDto); + final Map certDtoMap = + associateFrom(details, detail -> detail.getHistory().getId(), this::makeCertDetailDto); + + return associateFrom(histories, history -> history, history -> certDtoMap.get(history.getId())); } public CertDetailDto makeCertDetailDto(BloodDonationDetail detail) { From 1a2670eececdb41001a32564f5f880946a7a530d Mon Sep 17 00:00:00 2001 From: slolee Date: Mon, 12 Sep 2022 02:00:48 +0900 Subject: [PATCH 08/10] =?UTF-8?q?Refactor:=20CertificationService=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CertificationServiceTest.java | 6 +++--- .../domain/certification/dto/CertDetailDto.java | 12 +++++++----- .../certification/service/CertificationService.java | 7 +++---- .../chat/repository/ChatMessageRepository.java | 4 +--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java index c887079..0d056ac 100644 --- a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java +++ b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java @@ -60,9 +60,9 @@ class CertificationServiceTest { public void mapHistoryAndDetail_happy_case() { // given when(detailRepository.findByHistoryIdsIn(mapFrom(histories, BloodDonationHistory::getId))).thenReturn(details); - when(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).thenReturn(Optional.empty()); - when(chatMessageRepository.findByChatRoomIdAndType(200L, MessageType.THANKS)).thenReturn(Optional.of(chatMessage)); - when(chatMessageRepository.findByChatRoomIdAndType(300L, MessageType.THANKS)).thenReturn(Optional.empty()); + when(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).thenReturn(null); + when(chatMessageRepository.findByChatRoomIdAndType(200L, MessageType.THANKS)).thenReturn(chatMessage); + when(chatMessageRepository.findByChatRoomIdAndType(300L, MessageType.THANKS)).thenReturn(null); // when final Map res = certificationService.mapHistoryAndDetail(histories); diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java b/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java index fd3ca1f..70dc7f2 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/dto/CertDetailDto.java @@ -1,6 +1,7 @@ package com.zoopi.domain.certification.dto; import java.time.LocalDateTime; +import java.util.Optional; import lombok.Getter; @@ -16,13 +17,14 @@ public class CertDetailDto { private String thanksMessage = null; private LocalDateTime thanksMessageAt = null; - public CertDetailDto(BloodDonationDetail detail) { + public CertDetailDto(BloodDonationDetail detail, ChatMessage thanksMessage) { this.bloodDonationDetailId = detail.getId(); this.receiverPet = detail.getReceiverPet(); - } - public void setThanksMessage(ChatMessage thanksMessage) { - this.thanksMessage = thanksMessage.getMessage(); - this.thanksMessageAt = thanksMessage.getCreatedAt(); + Optional.ofNullable(thanksMessage).ifPresent(thanks -> { + this.thanksMessage = thanks.getMessage(); + this.thanksMessageAt = thanks.getCreatedAt(); + }); } + } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java index fe55581..51f4adb 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -15,6 +15,7 @@ import com.zoopi.domain.certification.entity.BloodDonationHistory; import com.zoopi.domain.certification.repository.BloodDonationDetailRepository; import com.zoopi.domain.certification.repository.BloodDonationHistoryRepository; +import com.zoopi.domain.chat.entity.ChatMessage; import com.zoopi.domain.chat.entity.MessageType; import com.zoopi.domain.chat.repository.ChatMessageRepository; @@ -41,10 +42,8 @@ public Map mapHistoryAndDetail(List { @Query("select c from ChatMessage c where c.chatRoom.id = :chatRoomId and c.type = :type") - Optional findByChatRoomIdAndType(Long chatRoomId, MessageType type); + ChatMessage findByChatRoomIdAndType(Long chatRoomId, MessageType type); } From 2af99168e3bd3556ddc4f7ce8da9c48afdb8da79 Mon Sep 17 00:00:00 2001 From: slolee Date: Wed, 14 Sep 2022 02:13:14 +0900 Subject: [PATCH 09/10] =?UTF-8?q?Refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=82=B4=EC=9A=A9=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/CertificationServiceTest.java | 51 +++++++++++-------- .../BloodDonationDetailRepository.java | 35 +------------ ...BloodDonationDetailRepositoryQueryDsl.java | 9 ++++ ...dDonationDetailRepositoryQueryDslImpl.java | 33 ++++++++++++ .../BloodDonationHistoryRepository.java | 5 +- .../service/CertificationService.java | 2 +- .../repository/ChatMessageRepository.java | 5 +- 7 files changed, 80 insertions(+), 60 deletions(-) create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDsl.java create mode 100644 module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDslImpl.java diff --git a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java index 0d056ac..747b293 100644 --- a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java +++ b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java @@ -2,20 +2,23 @@ import static com.zoopi.domain.certification.entity.BloodDonationType.*; import static com.zoopi.util.FunctionalUtils.*; -import static org.mockito.Mockito.*; import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.BDDMockito.*; import java.time.LocalDate; import java.util.List; import java.util.Map; -import java.util.Optional; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; import com.zoopi.domain.certification.dto.CertDetailDto; import com.zoopi.domain.certification.entity.BloodDonationDetail; import com.zoopi.domain.certification.entity.BloodDonationHistory; -import com.zoopi.domain.certification.repository.BloodDonationDetailRepository; +import com.zoopi.domain.certification.repository.BloodDonationDetailRepositoryQueryDslImpl; import com.zoopi.domain.certification.repository.BloodDonationHistoryRepository; import com.zoopi.domain.chat.entity.ChatMessage; import com.zoopi.domain.chat.entity.ChatRoom; @@ -25,17 +28,17 @@ import com.zoopi.domain.hospital.entity.Hospital; import com.zoopi.domain.pet.entity.Pet; +@ExtendWith(MockitoExtension.class) class CertificationServiceTest { - private final BloodDonationHistoryRepository historyRepository = mock(BloodDonationHistoryRepository.class); - private final BloodDonationDetailRepository detailRepository = mock(BloodDonationDetailRepository.class); - private final ChatMessageRepository chatMessageRepository = mock(ChatMessageRepository.class); - - private final CertificationService certificationService = new CertificationService( - historyRepository, - detailRepository, - chatMessageRepository - ); + @Mock + private BloodDonationHistoryRepository historyRepository; + @Mock + private BloodDonationDetailRepositoryQueryDslImpl detailRepository; + @Mock + private ChatMessageRepository chatMessageRepository; + @InjectMocks + private CertificationService certificationService; private final Pet donorPet = Pet.builder().build(); private final Pet receiverPet = Pet.builder().build(); @@ -54,15 +57,16 @@ class CertificationServiceTest { new BloodDonationDetail(3L, receiverPet, 300L, "", histories.get(3)) ); private final ChatRoom chatRoom = new ChatRoom(200L, 2L, donorPet, true, ChatRoomStatus.DONE); - private final ChatMessage chatMessage = new ChatMessage(1000L, chatRoom, 1L, "헌혈해주셔서 감사합니다 :)", MessageType.THANKS, true); + private final ChatMessage chatMessage = new ChatMessage(1000L, chatRoom, 1L, "헌혈해주셔서 감사합니다 :)", MessageType.THANKS, + true); @Test - public void mapHistoryAndDetail_happy_case() { + void mapHistoryAndDetail_happy_case() { // given - when(detailRepository.findByHistoryIdsIn(mapFrom(histories, BloodDonationHistory::getId))).thenReturn(details); - when(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).thenReturn(null); - when(chatMessageRepository.findByChatRoomIdAndType(200L, MessageType.THANKS)).thenReturn(chatMessage); - when(chatMessageRepository.findByChatRoomIdAndType(300L, MessageType.THANKS)).thenReturn(null); + given(detailRepository.findByHistoryIdsIn(mapFrom(histories, BloodDonationHistory::getId))).willReturn(details); + given(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).willReturn(null); + given(chatMessageRepository.findByChatRoomIdAndType(200L, MessageType.THANKS)).willReturn(chatMessage); + given(chatMessageRepository.findByChatRoomIdAndType(300L, MessageType.THANKS)).willReturn(null); // when final Map res = certificationService.mapHistoryAndDetail(histories); @@ -71,10 +75,13 @@ public void mapHistoryAndDetail_happy_case() { res.forEach((history, dto) -> { if (history.getType().equals(APPOINT)) { assertNotNull(dto); - if (history.getId() == 2) assertEquals(dto.getThanksMessage(), "헌혈해주셔서 감사합니다 :)"); - else assertNull(dto.getThanksMessage()); - } - else if (history.getType().equals(GENERAL)) assertNull(dto); + if (history.getId() == 2) { + assertEquals(dto.getThanksMessage(), "헌혈해주셔서 감사합니다 :)"); + } else { + assertNull(dto.getThanksMessage()); + } + } else if (history.getType().equals(GENERAL)) + assertNull(dto); }); } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java index 4b9310c..23ed960 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepository.java @@ -1,39 +1,8 @@ package com.zoopi.domain.certification.repository; -import java.util.List; - -import org.springframework.stereotype.Repository; - -import com.querydsl.jpa.impl.JPAQueryFactory; - -import lombok.RequiredArgsConstructor; +import org.springframework.data.jpa.repository.JpaRepository; import com.zoopi.domain.certification.entity.BloodDonationDetail; -import com.zoopi.domain.certification.entity.QBloodDonationDetail; -import com.zoopi.domain.certification.entity.QBloodDonationHistory; -import com.zoopi.domain.chat.entity.QChatMessage; -import com.zoopi.domain.chat.entity.QChatRoom; -import com.zoopi.domain.pet.entity.QPet; - -@Repository -@RequiredArgsConstructor -public class BloodDonationDetailRepository { - - private final JPAQueryFactory jpaQueryFactory; - private final QBloodDonationHistory bloodDonationHistory = QBloodDonationHistory.bloodDonationHistory; - private final QBloodDonationDetail bloodDonationDetail = QBloodDonationDetail.bloodDonationDetail; - private final QPet pet = QPet.pet; - private final QChatRoom chatRoom = QChatRoom.chatRoom; - private final QChatMessage chatMessage = QChatMessage.chatMessage; - - public List findByHistoryIdsIn(List ids) { - return jpaQueryFactory.selectFrom(bloodDonationDetail) - .innerJoin(bloodDonationHistory).on(bloodDonationHistory.id.eq(bloodDonationDetail.history.id)) - .fetchJoin() - .innerJoin(pet).on(pet.id.eq(bloodDonationDetail.receiverPet.id)) - .fetchJoin() - .where(bloodDonationDetail.history.id.in(ids)) - .fetch(); - } +public interface BloodDonationDetailRepository extends JpaRepository, BloodDonationDetailRepositoryQueryDsl { } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDsl.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDsl.java new file mode 100644 index 0000000..d4d61b3 --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDsl.java @@ -0,0 +1,9 @@ +package com.zoopi.domain.certification.repository; + +import java.util.List; + +import com.zoopi.domain.certification.entity.BloodDonationDetail; + +public interface BloodDonationDetailRepositoryQueryDsl { + List findByHistoryIdsIn(List ids); +} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDslImpl.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDslImpl.java new file mode 100644 index 0000000..e37b718 --- /dev/null +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationDetailRepositoryQueryDslImpl.java @@ -0,0 +1,33 @@ +package com.zoopi.domain.certification.repository; + +import static com.zoopi.domain.certification.entity.QBloodDonationDetail.*; +import static com.zoopi.domain.certification.entity.QBloodDonationHistory.*; +import static com.zoopi.domain.pet.entity.QPet.*; + +import java.util.List; + +import org.springframework.stereotype.Repository; + +import com.querydsl.jpa.impl.JPAQueryFactory; + +import lombok.RequiredArgsConstructor; + +import com.zoopi.domain.certification.entity.BloodDonationDetail; + +@Repository +@RequiredArgsConstructor +public class BloodDonationDetailRepositoryQueryDslImpl { + + private final JPAQueryFactory jpaQueryFactory; + + public List findByHistoryIdsIn(List ids) { + return jpaQueryFactory.selectFrom(bloodDonationDetail) + .innerJoin(bloodDonationHistory).on(bloodDonationHistory.id.eq(bloodDonationDetail.history.id)) + .fetchJoin() + .innerJoin(pet).on(pet.id.eq(bloodDonationDetail.receiverPet.id)) + .fetchJoin() + .where(bloodDonationDetail.history.id.in(ids)) + .fetch(); + } + +} diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java index 628d122..8ef3610 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java @@ -2,15 +2,16 @@ import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.zoopi.domain.certification.entity.BloodDonationHistory; @Repository -public interface BloodDonationHistoryRepository extends CrudRepository { +public interface BloodDonationHistoryRepository extends JpaRepository { @Query("select h from BloodDonationHistory h join fetch h.hospital join fetch h.pet where h.pet.id = :petId") List findAllByPetId(Long petId); + } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java index 51f4adb..98639fb 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -31,7 +31,7 @@ public List findAllHistoryBy(Long petId) { return historyRepository.findAllByPetId(petId); } - @Transactional + @Transactional(readOnly = true) public Map mapHistoryAndDetail(List histories) { final List ids = mapFrom(histories, BloodDonationHistory::getId); final List details = detailRepository.findByHistoryIdsIn(ids); diff --git a/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java b/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java index 1c2e914..50533e1 100644 --- a/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java +++ b/module-domain/src/main/java/com/zoopi/domain/chat/repository/ChatMessageRepository.java @@ -1,15 +1,16 @@ package com.zoopi.domain.chat.repository; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; -import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; import com.zoopi.domain.chat.entity.ChatMessage; import com.zoopi.domain.chat.entity.MessageType; @Repository -public interface ChatMessageRepository extends CrudRepository { +public interface ChatMessageRepository extends JpaRepository { @Query("select c from ChatMessage c where c.chatRoom.id = :chatRoomId and c.type = :type") ChatMessage findByChatRoomIdAndType(Long chatRoomId, MessageType type); + } From 10b7864ba2451a42e4cc1c04a34b8a58d151801a Mon Sep 17 00:00:00 2001 From: slolee Date: Sun, 18 Sep 2022 01:16:16 +0900 Subject: [PATCH 10/10] =?UTF-8?q?Refactor:=20=EC=BD=94=EB=93=9C=EB=A6=AC?= =?UTF-8?q?=EB=B7=B0=20=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../certification/controller/BloodDonationCertController.java | 3 ++- .../domain/certification/service/CertificationServiceTest.java | 2 +- .../repository/BloodDonationHistoryRepository.java | 2 +- .../domain/certification/service/CertificationService.java | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java index 76d40af..092995e 100644 --- a/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java +++ b/module-application/src/main/java/com/zoopi/client/certification/controller/BloodDonationCertController.java @@ -2,6 +2,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import lombok.RequiredArgsConstructor; @@ -18,7 +19,7 @@ public class BloodDonationCertController implements BloodDonationCertApi { private final BloodDonationCertService certService; @GetMapping("/{petId}") - public ResponseEntity retrieveCertification(Long petId) { + public ResponseEntity retrieveCertification(@PathVariable Long petId) { return ResponseEntity.ok( ResultResponse.of(ResultCode.OK, certService.retrieveCertification(petId)) ); diff --git a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java index 747b293..489d526 100644 --- a/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java +++ b/module-application/src/test/java/com/zoopi/domain/certification/service/CertificationServiceTest.java @@ -61,7 +61,7 @@ class CertificationServiceTest { true); @Test - void mapHistoryAndDetail_happy_case() { + void mapHistoryAndDetail_정상조회_확인() { // given given(detailRepository.findByHistoryIdsIn(mapFrom(histories, BloodDonationHistory::getId))).willReturn(details); given(chatMessageRepository.findByChatRoomIdAndType(100L, MessageType.THANKS)).willReturn(null); diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java index 8ef3610..4cd52e3 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/repository/BloodDonationHistoryRepository.java @@ -12,6 +12,6 @@ public interface BloodDonationHistoryRepository extends JpaRepository { @Query("select h from BloodDonationHistory h join fetch h.hospital join fetch h.pet where h.pet.id = :petId") - List findAllByPetId(Long petId); + List findAllFetchPetBy(Long petId); } diff --git a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java index 98639fb..83c985d 100644 --- a/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java +++ b/module-domain/src/main/java/com/zoopi/domain/certification/service/CertificationService.java @@ -28,7 +28,7 @@ public class CertificationService { private final ChatMessageRepository chatMessageRepository; public List findAllHistoryBy(Long petId) { - return historyRepository.findAllByPetId(petId); + return historyRepository.findAllFetchPetBy(petId); } @Transactional(readOnly = true)