From f813d8eae42a60b19885d62df66c1bba0b4de4e5 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Oct 2024 15:10:24 +0900 Subject: [PATCH 1/7] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20-=20=EC=83=9D=EC=84=B1=20or=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../live/room/menu/LiveRoomMenuController.kt | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt index 11e3aa8..fdd9dd3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt @@ -6,15 +6,16 @@ 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.GetMapping +import org.springframework.web.bind.annotation.PostMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @RestController +@PreAuthorize("hasRole('CREATOR')") @RequestMapping("/live/room/menu") class LiveRoomMenuController(private val service: LiveRoomMenuService) { @GetMapping("/all") - @PreAuthorize("hasRole('CREATOR')") fun getAllLiveMenu( @RequestParam creatorId: Long, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? @@ -23,4 +24,23 @@ class LiveRoomMenuController(private val service: LiveRoomMenuService) { ApiResponse.ok(service.getAllLiveMenu(creatorId = creatorId, memberId = member.id!!)) } + + @PostMapping + fun createOrUpdateLiveMenu( + @RequestParam request: UpdateLiveMenuRequest, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + + ApiResponse.ok( + if (request.id > 0) { + service.updateLiveMenu(memberId = member.id!!, request = request) + } else { + service.createLiveMenu( + memberId = member.id!!, + request = CreateLiveMenuRequest(menu = request.menu, isActive = false) + ) + } + ) + } } From d024e0fa230f02cf0d222da6b168f2664769cc71 Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 8 Oct 2024 15:20:22 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=A9=94?= =?UTF-8?q?=EB=89=B4=20-=20=EC=83=9D=EC=84=B1=20or=20=EC=88=98=EC=A0=95=20?= =?UTF-8?q?API=20-=20RequestParam=20->=20RequestBody=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/menu/LiveRoomMenuController.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt index fdd9dd3..7c307b6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/menu/LiveRoomMenuController.kt @@ -7,6 +7,7 @@ import org.springframework.security.access.prepost.PreAuthorize import org.springframework.security.core.annotation.AuthenticationPrincipal 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.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController @@ -27,7 +28,7 @@ class LiveRoomMenuController(private val service: LiveRoomMenuService) { @PostMapping fun createOrUpdateLiveMenu( - @RequestParam request: UpdateLiveMenuRequest, + @RequestBody request: UpdateLiveMenuRequest, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") From 0d6e4804f5d4ee57968e869d39b17a93f3d881e4 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 9 Oct 2024 00:18:56 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0,=20=ED=81=90=EB=A0=88=EC=9D=B4=EC=85=98=20-?= =?UTF-8?q?=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D=EC=9D=84=20=ED=96=88?= =?UTF-8?q?=EB=8D=94=EB=9D=BC=EB=8F=84=2019=EA=B8=88=20=EC=BD=98=ED=85=90?= =?UTF-8?q?=EC=B8=A0=20=EB=B3=B4=EA=B8=B0=EB=A5=BC=20=ED=99=9C=EC=84=B1?= =?UTF-8?q?=ED=99=94=20=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9C=BC=EB=A9=B4=20?= =?UTF-8?q?19=EA=B8=88=20=EC=BD=98=ED=85=90=EC=B8=A0=EA=B0=80=20=EB=B3=B4?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=95=8A=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=9C=A0?= =?UTF-8?q?=ED=98=95(=EB=82=A8=EC=84=B1=ED=96=A5/=EC=97=AC=EC=84=B1?= =?UTF-8?q?=ED=96=A5)=EC=9D=84=20=EC=84=A0=ED=83=9D=ED=95=A0=20=EC=88=98?= =?UTF-8?q?=20=EC=9E=88=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentRepository.kt | 44 +++++++++++-- .../vividnext/sodalive/content/ContentType.kt | 12 ++++ .../main/AudioContentMainController.kt | 18 +++++- .../content/main/AudioContentMainService.kt | 64 +++++++++++-------- 4 files changed, 104 insertions(+), 34 deletions(-) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/ContentType.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index e086e62..d0b212f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -79,11 +79,17 @@ interface AudioContentQueryRepository { memberId: Long, theme: String = "", isAdult: Boolean = false, + contentType: ContentType = ContentType.ALL, offset: Long = 0, limit: Long = 20 ): List - fun totalCountNewContentFor2Weeks(theme: String, memberId: Long, isAdult: Boolean): Int + fun totalCountNewContentFor2Weeks( + theme: String, + memberId: Long, + isAdult: Boolean, + contentType: ContentType = ContentType.ALL + ): Int fun getNewContentUploadCreatorList( cloudfrontHost: String, @@ -95,7 +101,8 @@ interface AudioContentQueryRepository { fun findAudioContentByCurationId( curationId: Long, cloudfrontHost: String, - isAdult: Boolean + isAdult: Boolean, + contentType: ContentType = ContentType.ALL ): List fun getAudioContentRanking( @@ -417,7 +424,12 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .size } - override fun totalCountNewContentFor2Weeks(theme: String, memberId: Long, isAdult: Boolean): Int { + override fun totalCountNewContentFor2Weeks( + theme: String, + memberId: Long, + isAdult: Boolean, + contentType: ContentType + ): Int { var where = audioContent.isActive.isTrue .and(audioContent.duration.isNotNull) .and(audioContent.releaseDate.goe(LocalDateTime.now().minusWeeks(2))) @@ -429,6 +441,12 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + ) + } } if (theme.isNotBlank()) { @@ -450,6 +468,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) memberId: Long, theme: String, isAdult: Boolean, + contentType: ContentType, offset: Long, limit: Long ): List { @@ -464,6 +483,12 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + ) + } } if (theme.isNotBlank()) { @@ -514,7 +539,6 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) .orderBy(Expressions.numberTemplate(Double::class.java, "function('rand')").asc()) .limit(20) .fetch() - .asSequence() .map { GetNewContentUploadCreator( it.id!!, @@ -526,7 +550,6 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } ) } - .toList() } override fun getAudioContentMainBannerList(isAdult: Boolean): List { @@ -562,7 +585,8 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) override fun findAudioContentByCurationId( curationId: Long, cloudfrontHost: String, - isAdult: Boolean + isAdult: Boolean, + contentType: ContentType ): List { var where = audioContent.isActive.isTrue .and(audioContent.member.isNotNull) @@ -572,6 +596,14 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.auth.gender.eq( + if (contentType == ContentType.MALE) 1 else 0 + ) + ) + } } return queryFactory diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentType.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentType.kt new file mode 100644 index 0000000..d7e350e --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/ContentType.kt @@ -0,0 +1,12 @@ +package kr.co.vividnext.sodalive.content + +enum class ContentType { + // 전체 + ALL, + + // 남성향 + MALE, + + // 여성향 + FEMALE +} diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt index 058ccf3..1cc4fd3 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt @@ -2,6 +2,7 @@ package kr.co.vividnext.sodalive.content.main import kr.co.vividnext.sodalive.common.ApiResponse import kr.co.vividnext.sodalive.common.SodaException +import kr.co.vividnext.sodalive.content.ContentType import kr.co.vividnext.sodalive.content.order.OrderService import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable @@ -82,16 +83,28 @@ class AudioContentMainController( @GetMapping("/new/all") fun getNewContentAllByTheme( @RequestParam("theme") theme: String, + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, + @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getNewContentFor2WeeksByTheme(theme, member, pageable)) + ApiResponse.ok( + service.getNewContentFor2WeeksByTheme( + theme = theme, + isAdultContentVisible = isAdultContentVisible ?: true, + contentType = contentType ?: ContentType.ALL, + member = member, + pageable = pageable + ) + ) } @GetMapping("/curation-list") fun getCurationList( + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, + @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -100,7 +113,8 @@ class AudioContentMainController( ApiResponse.ok( service.getAudioContentCurationListWithPaging( memberId = member.id!!, - isAdult = member.auth != null, + isAdult = member.auth != null && (isAdultContentVisible ?: true), + contentType = contentType ?: ContentType.ALL, offset = pageable.offset, limit = pageable.pageSize.toLong() ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt index 1b78b64..62f37c2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt @@ -1,6 +1,7 @@ package kr.co.vividnext.sodalive.content.main import kr.co.vividnext.sodalive.content.AudioContentRepository +import kr.co.vividnext.sodalive.content.ContentType import kr.co.vividnext.sodalive.content.main.banner.AudioContentBannerType import kr.co.vividnext.sodalive.content.main.banner.GetAudioContentBannerResponse import kr.co.vividnext.sodalive.content.main.curation.GetAudioContentCurationResponse @@ -45,20 +46,29 @@ class AudioContentMainService( } @Transactional(readOnly = true) - fun getNewContentFor2WeeksByTheme(theme: String, member: Member, pageable: Pageable): GetNewContentAllResponse { - val totalCount = - repository.totalCountNewContentFor2Weeks(theme, memberId = member.id!!, isAdult = member.auth != null) + fun getNewContentFor2WeeksByTheme( + theme: String, + isAdultContentVisible: Boolean, + contentType: ContentType, + member: Member, + pageable: Pageable + ): GetNewContentAllResponse { + val totalCount = repository.totalCountNewContentFor2Weeks( + theme, + memberId = member.id!!, + isAdult = member.auth != null && isAdultContentVisible, + contentType = contentType + ) val items = repository.findByThemeFor2Weeks( cloudfrontHost = imageHost, memberId = member.id!!, theme = theme, - isAdult = member.auth != null, + isAdult = member.auth != null && isAdultContentVisible, + contentType = contentType, offset = pageable.offset, limit = pageable.pageSize.toLong() ) - .asSequence() .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.creatorId) } - .toList() return GetNewContentAllResponse(totalCount, items) } @@ -130,26 +140,28 @@ class AudioContentMainService( cacheNames = ["default"], key = "'getAudioContentCurationListWithPaging:' + #memberId + ':' + #isAdult + ':' + #offset + ':' + #limit" ) - fun getAudioContentCurationListWithPaging(memberId: Long, isAdult: Boolean, offset: Long, limit: Long) = - repository.getAudioContentCurationList(isAdult = isAdult, offset = offset, limit = limit) - .asSequence() - .map { - GetAudioContentCurationResponse( + fun getAudioContentCurationListWithPaging( + memberId: Long, + isAdult: Boolean, + contentType: ContentType, + offset: Long, + limit: Long + ) = repository.getAudioContentCurationList(isAdult = isAdult, offset = offset, limit = limit) + .map { + GetAudioContentCurationResponse( + curationId = it.id!!, + title = it.title, + description = it.description, + contents = repository.findAudioContentByCurationId( curationId = it.id!!, - title = it.title, - description = it.description, - contents = repository.findAudioContentByCurationId( - curationId = it.id!!, - cloudfrontHost = imageHost, - isAdult = isAdult - ) - .asSequence() - .filter { content -> - !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = content.creatorId) - } - .toList() + cloudfrontHost = imageHost, + isAdult = isAdult, + contentType = contentType ) - } - .filter { it.contents.isNotEmpty() } - .toList() + .filter { content -> + !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = content.creatorId) + } + ) + } + .filter { it.contents.isNotEmpty() } } From 5bfcbe912624988859b407edb5fff84192bb78a6 Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 9 Oct 2024 00:25:00 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=EC=9D=84=20=ED=96=88=EB=8D=94=EB=9D=BC=EB=8F=84=2019=EA=B8=88?= =?UTF-8?q?=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=B3=B4=EA=B8=B0=EB=A5=BC=20?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94=20=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9C=BC=EB=A9=B4=2019=EA=B8=88=20=EB=9D=BC=EC=9D=B4=EB=B8=8C?= =?UTF-8?q?=EA=B0=80=20=EB=B3=B4=EC=9D=B4=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/live/room/LiveRoomController.kt | 12 +++++++++++- .../vividnext/sodalive/live/room/LiveRoomService.kt | 7 ++++--- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt index 43ab9f6..02029a5 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomController.kt @@ -33,12 +33,22 @@ class LiveRoomController( @RequestParam timezone: String, @RequestParam dateString: String? = null, @RequestParam status: LiveRoomStatus, + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getRoomList(dateString, status, pageable, member, timezone)) + ApiResponse.ok( + service.getRoomList( + dateString, + status, + isAdultContentVisible ?: true, + pageable, + member, + timezone + ) + ) } @PostMapping diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt index 2de3e07..bad1a6d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomService.kt @@ -113,6 +113,7 @@ class LiveRoomService( fun getRoomList( dateString: String?, status: LiveRoomStatus, + isAdultContentVisible: Boolean, pageable: Pageable, member: Member, timezone: String @@ -123,7 +124,7 @@ class LiveRoomService( timezone, memberId = member.id!!, isCreator = member.role == MemberRole.CREATOR, - isAdult = member.auth != null + isAdult = member.auth != null && isAdultContentVisible ) } else if (dateString != null) { getLiveRoomListReservationWithDate( @@ -132,14 +133,14 @@ class LiveRoomService( timezone, memberId = member.id!!, isCreator = member.role == MemberRole.CREATOR, - isAdult = member.auth != null + isAdult = member.auth != null && isAdultContentVisible ) } else { getLiveRoomListReservationWithoutDate( timezone, isCreator = member.role == MemberRole.CREATOR, memberId = member.id!!, - isAdult = member.auth != null + isAdult = member.auth != null && isAdultContentVisible ) } From fc8b94403147c2cfa1220b2b3a9227326a06b1de Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Oct 2024 13:27:11 +0900 Subject: [PATCH 5/7] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=20-=20=EB=B3=B8=EC=9D=B8=EC=9D=B8=EC=A6=9D?= =?UTF-8?q?=EC=9D=84=20=ED=96=88=EB=8D=94=EB=9D=BC=EB=8F=84=2019=EA=B8=88?= =?UTF-8?q?=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=B3=B4=EA=B8=B0=EB=A5=BC=20?= =?UTF-8?q?=ED=99=9C=EC=84=B1=ED=99=94=20=ED=95=98=EC=A7=80=20=EC=95=8A?= =?UTF-8?q?=EC=9C=BC=EB=A9=B4=2019=EA=B8=88=20=EC=BD=98=ED=85=90=EC=B8=A0?= =?UTF-8?q?=EA=B0=80=20=EB=B3=B4=EC=9D=B4=EC=A7=80=20=EC=95=8A=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/AudioContentRepository.kt | 8 ++++++++ .../content/main/AudioContentMainController.kt | 12 +++++++++++- .../content/main/AudioContentMainService.kt | 13 +++++++++---- 3 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index d0b212f..7e8abaa 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -64,6 +64,7 @@ interface AudioContentQueryRepository { theme: String = "", sortType: SortType = SortType.NEWEST, isAdult: Boolean = false, + contentType: ContentType = ContentType.ALL, offset: Long = 0, limit: Long = 20 ): List @@ -340,6 +341,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) theme: String, sortType: SortType, isAdult: Boolean, + contentType: ContentType, offset: Long, limit: Long ): List { @@ -368,6 +370,12 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) + } else { + if (contentType != ContentType.ALL) { + where = where.and( + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + ) + } } if (theme.isNotBlank()) { diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt index 1cc4fd3..c1fc22d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainController.kt @@ -63,12 +63,22 @@ class AudioContentMainController( @GetMapping("/new") fun getNewContentByTheme( @RequestParam("theme") theme: String, + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, + @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getNewContentByTheme(theme, member, pageable)) + ApiResponse.ok( + service.getNewContentByTheme( + theme, + isAdultContentVisible = isAdultContentVisible ?: true, + contentType = contentType ?: ContentType.ALL, + member, + pageable + ) + ) } @GetMapping("/theme") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt index 62f37c2..73be372 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/AudioContentMainService.kt @@ -31,18 +31,23 @@ class AudioContentMainService( } @Transactional(readOnly = true) - fun getNewContentByTheme(theme: String, member: Member, pageable: Pageable): List { + fun getNewContentByTheme( + theme: String, + isAdultContentVisible: Boolean, + contentType: ContentType, + member: Member, + pageable: Pageable + ): List { return repository.findByTheme( cloudfrontHost = imageHost, memberId = member.id!!, theme = theme, - isAdult = member.auth != null, + isAdult = member.auth != null && isAdultContentVisible, + contentType = contentType, offset = pageable.offset, limit = pageable.pageSize.toLong() ) - .asSequence() .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.creatorId) } - .toList() } @Transactional(readOnly = true) From b9ad3bdb727a0c3dea0b1adeb763bb5fdcf31e64 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Oct 2024 15:36:21 +0900 Subject: [PATCH 6/7] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0,=20=ED=81=90=EB=A0=88=EC=9D=B4=EC=85=98=20-?= =?UTF-8?q?=2019=EA=B8=88=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=84=B1?= =?UTF-8?q?=ED=96=A5=20=EB=8D=B0=EC=9D=B4=ED=84=B0=EA=B0=80=20=EC=9E=88?= =?UTF-8?q?=EC=9D=84=20=EB=95=8C=20=EC=84=B1=ED=96=A5=20+=20=EB=B9=84?= =?UTF-8?q?=EC=84=B1=EC=9D=B8=20=EC=BD=98=ED=85=90=EC=B8=A0=EA=B0=80=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EB=90=98=EB=8F=84=EB=A1=9D=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 --- .../vividnext/sodalive/content/AudioContentRepository.kt | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 7e8abaa..56e0526 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -374,6 +374,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (contentType != ContentType.ALL) { where = where.and( audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + .or(audioContent.isAdult.isFalse) ) } } @@ -453,6 +454,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (contentType != ContentType.ALL) { where = where.and( audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + .or(audioContent.isAdult.isFalse) ) } } @@ -495,6 +497,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) if (contentType != ContentType.ALL) { where = where.and( audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + .or(audioContent.isAdult.isFalse) ) } } @@ -607,9 +610,8 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } else { if (contentType != ContentType.ALL) { where = where.and( - audioContent.member.auth.gender.eq( - if (contentType == ContentType.MALE) 1 else 0 - ) + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + .or(audioContent.isAdult.isFalse) ) } } From 057ff1724056713bb72f1fa75e72382deb847962 Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Oct 2024 15:47:47 +0900 Subject: [PATCH 7/7] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EC=83=88=EB=A1=9C=EC=9A=B4=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0,=20=ED=81=90=EB=A0=88=EC=9D=B4=EC=85=98=20-?= =?UTF-8?q?=20=EB=82=A8=EC=84=B1=ED=96=A5=EC=9D=B4=EB=A9=B4=20=EC=97=AC?= =?UTF-8?q?=EC=84=B1=20=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0,=20?= =?UTF-8?q?=EC=97=AC=EC=84=B1=ED=96=A5=EC=9D=B4=EB=A9=B4=20=EB=82=A8?= =?UTF-8?q?=EC=84=B1=20=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0=2019?= =?UTF-8?q?=EC=9E=91=ED=92=88=20+=20=EB=B9=84=EC=84=B1=EC=9D=B8=20?= =?UTF-8?q?=EC=9E=91=ED=92=88=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EB=90=98?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vividnext/sodalive/content/AudioContentRepository.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt index 56e0526..a11b3be 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -373,7 +373,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } else { if (contentType != ContentType.ALL) { where = where.and( - audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 0 else 1) .or(audioContent.isAdult.isFalse) ) } @@ -453,7 +453,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } else { if (contentType != ContentType.ALL) { where = where.and( - audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 0 else 1) .or(audioContent.isAdult.isFalse) ) } @@ -496,7 +496,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } else { if (contentType != ContentType.ALL) { where = where.and( - audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 0 else 1) .or(audioContent.isAdult.isFalse) ) } @@ -610,7 +610,7 @@ class AudioContentQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) } else { if (contentType != ContentType.ALL) { where = where.and( - audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 1 else 0) + audioContent.member.auth.gender.eq(if (contentType == ContentType.MALE) 0 else 1) .or(audioContent.isAdult.isFalse) ) }