From b1541c1fd23df9ec91da58592f65c1f2f1ebcf81 Mon Sep 17 00:00:00 2001 From: HyungJu Date: Sun, 24 Mar 2024 05:35:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EB=93=9C=EB=94=94=EC=96=B4=20=EB=B0=B1?= =?UTF-8?q?=EC=8B=A0=20=EC=9D=B8=EC=A6=9D=EC=84=9C=EA=B3=A0=EC=B3=A4?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/InoculationService.kt | 68 +++++++++++-------- .../persistence/InoculationRepository.kt | 11 ++- 2 files changed, 49 insertions(+), 30 deletions(-) diff --git a/src/main/kotlin/com/vacgom/backend/inoculation/application/InoculationService.kt b/src/main/kotlin/com/vacgom/backend/inoculation/application/InoculationService.kt index e5ba463..97e40e6 100644 --- a/src/main/kotlin/com/vacgom/backend/inoculation/application/InoculationService.kt +++ b/src/main/kotlin/com/vacgom/backend/inoculation/application/InoculationService.kt @@ -70,13 +70,13 @@ class InoculationService( ): List { val validatedVaccinationType = VaccinationType.valueOf(vaccinationType.uppercase()) val inoculations = ( - inoculationRepository.findInoculationsByMemberIdAndVaccinationTypeAndDiseaseName( - memberId, - validatedVaccinationType, - request.name, - ) - ?: throw BusinessException(GlobalError.GLOBAL_NOT_FOUND) - ) + inoculationRepository.findInoculationsByMemberIdAndVaccinationTypeAndDiseaseName( + memberId, + validatedVaccinationType, + request.name, + ) + ?: throw BusinessException(GlobalError.GLOBAL_NOT_FOUND) + ) return inoculations.map { InoculationDetailResponse( @@ -92,16 +92,25 @@ class InoculationService( } fun getCertificates(memberId: UUID): List { - val inoculations = inoculationRepository.findDistinctLatestInoculationsByMemberId(memberId) - val sortedByDescending = inoculations.sortedByDescending { it.date } - return sortedByDescending.map { + val inoculations1 = inoculationRepository.findInoculationsByMemberId(memberId) + val diseases = inoculations1.map { it.vaccination.diseaseName }.toSet() + + val map: MutableMap = mutableMapOf() + + inoculations1.forEach { + if (!map.containsKey(it.vaccination.diseaseName)) { + map[it.vaccination.diseaseName] = it + } + } + + return map.map { InoculationCertificateResponse( memberId.toString(), - it.vaccination.id.toString(), - it.vaccination.diseaseName, - it.vaccination.vaccineName, - it.date, - it.vaccination.certificationIcon, + it.value.vaccination.id.toString(), + it.value.vaccination.diseaseName, + it.value.vaccination.vaccineName, + it.value.date, + it.value.vaccination.certificationIcon, ) }.toList() } @@ -111,20 +120,23 @@ class InoculationService( val member = memberRepository.findMemberByNickname(Nickname(name)) ?: throw BusinessException(MemberError.NOT_FOUND) - val eventVaccination = vaccinationRepository.findById(UUID.fromString("30784537-3331-3646-3734-453738383131")) - .orElseThrow { BusinessException(GlobalError.GLOBAL_NOT_FOUND) } + val eventVaccination = + vaccinationRepository.findById(UUID.fromString("30784537-3331-3646-3734-453738383131")) + .orElseThrow { BusinessException(GlobalError.GLOBAL_NOT_FOUND) } - inoculationRepository.save(Inoculation( - 1, - "이벤트", - LocalDate.now(), - "백신아 곰아워!", - "이벤트 백신", - "아프지 말라곰", - "https://vacgom.co.kr", - member, - eventVaccination - )) + inoculationRepository.save( + Inoculation( + 1, + "이벤트", + LocalDate.now(), + "백신아 곰아워!", + "이벤트 백신", + "아프지 말라곰", + "https://vacgom.co.kr", + member, + eventVaccination, + ), + ) notificationService.sendNotification(member.id!!, "이벤트 백신 접종 증명서가 발신되었어요!", "ㅎㅅㅎ") } } diff --git a/src/main/kotlin/com/vacgom/backend/inoculation/infrastructure/persistence/InoculationRepository.kt b/src/main/kotlin/com/vacgom/backend/inoculation/infrastructure/persistence/InoculationRepository.kt index e41749d..c1fa9cf 100644 --- a/src/main/kotlin/com/vacgom/backend/inoculation/infrastructure/persistence/InoculationRepository.kt +++ b/src/main/kotlin/com/vacgom/backend/inoculation/infrastructure/persistence/InoculationRepository.kt @@ -7,6 +7,14 @@ import org.springframework.data.jpa.repository.Query import java.util.* interface InoculationRepository : JpaRepository { + @Query( + "select i " + + "from Inoculation i " + + "where i.member.id = :memberId " + + "order by i.date desc", + ) + fun findInoculationsByMemberId(memberId: UUID): List + @Query( "select i " + "from Inoculation i " + @@ -41,8 +49,7 @@ interface InoculationRepository : JpaRepository { @Query( "SELECT i " + "FROM Inoculation i JOIN i.vaccination v " + - "GROUP BY i.vaccination.id " + - "HAVING i.member.id = :memberId " + + "WHERE i.member.id = :memberId " + "ORDER BY i.inoculationOrder DESC", ) fun findDistinctLatestInoculationsByMemberId(memberId: UUID): List