From be6f324fb19f89ad248c0c10a1a9f116eb559e8a Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 19 Jun 2026 05:35:05 +0900 Subject: [PATCH] =?UTF-8?q?fix(event):=20=EC=9D=B4=EB=B2=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=84=B1=EC=9D=B8=20=EC=97=AC=EB=B6=80=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B8=B0=EC=A4=80=EC=9D=84=20=EC=9D=B8=EC=A6=9D=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=EC=86=8C=EB=A1=9C=20=EB=B3=80=EA=B2=BD=ED=95=9C?= =?UTF-8?q?=EB=8B=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/event/EventController.kt | 10 ++--- .../vividnext/sodalive/event/EventService.kt | 19 +++++++++ .../sodalive/event/EventServiceTest.kt | 39 +++++++++++++++++++ 3 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 src/test/kotlin/kr/co/vividnext/sodalive/event/EventServiceTest.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt index 20bf6d19..6b30874a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt @@ -2,7 +2,6 @@ package kr.co.vividnext.sodalive.event import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.member.Member -import kr.co.vividnext.sodalive.member.MemberRole import org.springframework.security.access.prepost.PreAuthorize import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.DeleteMapping @@ -24,11 +23,8 @@ class EventController(private val service: EventService) { ) = run { ApiResponse.ok( service.getEventList( - if (member?.role == MemberRole.ADMIN) { - null - } else { - member?.auth != null - } + memberId = member?.id, + memberRole = member?.role ) ) } @@ -36,7 +32,7 @@ class EventController(private val service: EventService) { @GetMapping("/popup") fun getEventPopup( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? - ) = ApiResponse.ok(service.getEventPopup(member?.auth != null)) + ) = ApiResponse.ok(service.getEventPopup(memberId = member?.id)) @PostMapping @PreAuthorize("hasRole('ADMIN')") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt index b103cd2a..94b25278 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt @@ -3,6 +3,8 @@ package kr.co.vividnext.sodalive.event import com.amazonaws.services.s3.model.ObjectMetadata import kr.co.vividnext.sodalive.aws.s3.S3Uploader import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.member.MemberRole +import kr.co.vividnext.sodalive.member.auth.AuthRepository import kr.co.vividnext.sodalive.utils.generateFileName import org.springframework.beans.factory.annotation.Value import org.springframework.data.repository.findByIdOrNull @@ -17,6 +19,7 @@ import java.time.format.DateTimeFormatter class EventService( private val repository: EventRepository, private val s3Uploader: S3Uploader, + private val authRepository: AuthRepository, @Value("\${cloud.aws.s3.bucket}") private val bucket: String, @@ -45,6 +48,16 @@ class EventService( return GetEventResponse(0, eventList) } + @Transactional(readOnly = true) + fun getEventList(memberId: Long?, memberRole: MemberRole?): GetEventResponse { + val isAdult = if (memberRole == MemberRole.ADMIN) { + null + } else { + memberId?.let { authRepository.getAuthIdByMemberId(it) != null } ?: false + } + return getEventList(isAdult) + } + @Transactional(readOnly = true) fun getEventPopup(isAdult: Boolean): EventItem? { val eventPopup = repository.getMainEventPopup(isAdult) @@ -66,6 +79,12 @@ class EventService( return eventPopup } + @Transactional(readOnly = true) + fun getEventPopup(memberId: Long?): EventItem? { + val isAdult = memberId?.let { authRepository.getAuthIdByMemberId(it) != null } ?: false + return getEventPopup(isAdult) + } + @Transactional fun save( thumbnail: MultipartFile, diff --git a/src/test/kotlin/kr/co/vividnext/sodalive/event/EventServiceTest.kt b/src/test/kotlin/kr/co/vividnext/sodalive/event/EventServiceTest.kt new file mode 100644 index 00000000..6e9d4feb --- /dev/null +++ b/src/test/kotlin/kr/co/vividnext/sodalive/event/EventServiceTest.kt @@ -0,0 +1,39 @@ +package kr.co.vividnext.sodalive.event + +import kr.co.vividnext.sodalive.aws.s3.S3Uploader +import kr.co.vividnext.sodalive.member.MemberRole +import kr.co.vividnext.sodalive.member.auth.AuthRepository +import org.junit.jupiter.api.Test +import org.mockito.Mockito + +class EventServiceTest { + private val repository = Mockito.mock(EventRepository::class.java) + private val authRepository = Mockito.mock(AuthRepository::class.java) + private val service = EventService( + repository = repository, + s3Uploader = Mockito.mock(S3Uploader::class.java), + authRepository = authRepository, + bucket = "test-bucket", + cloudFrontHost = "https://cdn.test" + ) + + @Test + fun shouldResolveAdultFlagFromAuthRepositoryForMemberEventList() { + Mockito.`when`(authRepository.getAuthIdByMemberId(10L)).thenReturn(100L) + Mockito.`when`(repository.getEventList(true)).thenReturn(emptyList()) + + service.getEventList(memberId = 10L, memberRole = MemberRole.USER) + + Mockito.verify(repository).getEventList(true) + } + + @Test + fun shouldKeepAdminEventListUnfiltered() { + Mockito.`when`(repository.getEventList(null)).thenReturn(emptyList()) + + service.getEventList(memberId = 1L, memberRole = MemberRole.ADMIN) + + Mockito.verify(repository).getEventList(null) + Mockito.verifyNoInteractions(authRepository) + } +}