From 61cf1577dc52d5e1cc146c5ba17cfd00f5b52684 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 21 Nov 2023 21:41:45 +0900 Subject: [PATCH] =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=20=EB=B0=B0?= =?UTF-8?q?=EB=84=88,=20=ED=8C=9D=EC=97=85=20-=20=EB=B3=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=9D=B8=EC=A6=9D=20=EC=97=AC=EB=B6=80=EC=97=90=20=EB=94=B0?= =?UTF-8?q?=EB=9D=BC=20=EB=85=B8=EC=B6=9C=ED=95=A0=20=EC=88=98=20=EC=9E=88?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20isAdult=20=EC=BB=AC=EB=9F=BC=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/event/Event.kt | 2 + .../sodalive/event/EventController.kt | 10 +++- .../sodalive/event/EventRepository.kt | 48 +++++++++++++++---- .../vividnext/sodalive/event/EventService.kt | 8 ++-- .../sodalive/event/GetEventResponse.kt | 1 + 5 files changed, 53 insertions(+), 16 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/event/Event.kt b/src/main/kotlin/kr/co/vividnext/sodalive/event/Event.kt index f529a46..8f0f1e9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/Event.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/Event.kt @@ -16,6 +16,8 @@ data class Event( var link: String?, @Column(nullable = true) var title: String?, + @Column(nullable = true) + var isAdult: Boolean? = null, @Column(nullable = false) var isPopup: Boolean = false, @Column(nullable = false) 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 17e8bab..e102638 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventController.kt @@ -1,7 +1,9 @@ package kr.co.vividnext.sodalive.event import kr.co.vividnext.sodalive.common.ApiResponse +import kr.co.vividnext.sodalive.member.Member import org.springframework.security.access.prepost.PreAuthorize +import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.web.bind.annotation.DeleteMapping import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.PathVariable @@ -16,10 +18,14 @@ import org.springframework.web.multipart.MultipartFile @RequestMapping("/event") class EventController(private val service: EventService) { @GetMapping - fun getEventList() = ApiResponse.ok(service.getEventList()) + fun getEventList( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = ApiResponse.ok(service.getEventList(member?.auth != null)) @GetMapping("/popup") - fun getEventPopup() = ApiResponse.ok(service.getEventPopup()) + fun getEventPopup( + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = ApiResponse.ok(service.getEventPopup(member?.auth != null)) @PostMapping @PreAuthorize("hasRole('ADMIN')") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventRepository.kt index 29624eb..8ae0ac5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventRepository.kt @@ -9,13 +9,27 @@ import org.springframework.stereotype.Repository interface EventRepository : JpaRepository, EventQueryRepository interface EventQueryRepository { - fun getEventList(): List - fun getMainEventPopup(): EventItem? + fun getEventList(isAdult: Boolean): List + fun getMainEventPopup(isAdult: Boolean): EventItem? } @Repository class EventQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : EventQueryRepository { - override fun getEventList(): List { + override fun getEventList(isAdult: Boolean): List { + var where = event.isActive.isTrue + + where = if (isAdult) { + where.and( + event.isAdult.isNull + .or(event.isAdult.isTrue) + ) + } else { + where.and( + event.isAdult.isNull + .or(event.isAdult.isFalse) + ) + } + return queryFactory .select( QEventItem( @@ -25,16 +39,33 @@ class EventQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Even event.detailImage, event.popupImage, event.link, + event.isAdult, event.isPopup ) ) .from(event) - .where(event.isActive.isTrue) + .where(where) .orderBy(event.id.desc()) .fetch() } - override fun getMainEventPopup(): EventItem? { + override fun getMainEventPopup(isAdult: Boolean): EventItem? { + var where = event.isActive.isTrue + .and(event.isPopup.isTrue) + .and(event.popupImage.isNotNull) + + where = if (isAdult) { + where.and( + event.isAdult.isNull + .or(event.isAdult.isTrue) + ) + } else { + where.and( + event.isAdult.isNull + .or(event.isAdult.isFalse) + ) + } + return queryFactory .select( QEventItem( @@ -44,15 +75,12 @@ class EventQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Even event.detailImage, event.popupImage, event.link, + event.isAdult, event.isPopup ) ) .from(event) - .where( - event.isActive.isTrue - .and(event.isPopup.isTrue) - .and(event.popupImage.isNotNull) - ) + .where(where) .orderBy(event.id.desc()) .fetchFirst() } 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 e6ddd74..2d07121 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/EventService.kt @@ -20,8 +20,8 @@ class EventService( @Value("\${cloud.aws.cloud-front.host}") private val cloudFrontHost: String ) { - fun getEventList(): GetEventResponse { - val eventList = repository.getEventList() + fun getEventList(isAdult: Boolean): GetEventResponse { + val eventList = repository.getEventList(isAdult) .asSequence() .map { if (!it.thumbnailImageUrl.startsWith("https://")) { @@ -43,8 +43,8 @@ class EventService( return GetEventResponse(0, eventList) } - fun getEventPopup(): EventItem? { - val eventPopup = repository.getMainEventPopup() + fun getEventPopup(isAdult: Boolean): EventItem? { + val eventPopup = repository.getMainEventPopup(isAdult) if (eventPopup != null) { if (!eventPopup.thumbnailImageUrl.startsWith("https://")) { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/event/GetEventResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/event/GetEventResponse.kt index 4e3b711..b557f50 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/event/GetEventResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/event/GetEventResponse.kt @@ -17,5 +17,6 @@ data class EventItem @QueryProjection constructor( @JsonProperty("detailImageUrl") var detailImageUrl: String? = null, @JsonProperty("popupImageUrl") var popupImageUrl: String? = null, @JsonProperty("link") val link: String? = null, + @JsonProperty("isAdult") val isAdult: Boolean? = null, @JsonProperty("isPopup") val isPopup: Boolean )