From fc8b94403147c2cfa1220b2b3a9227326a06b1de Mon Sep 17 00:00:00 2001 From: Klaus Date: Thu, 10 Oct 2024 13:27:11 +0900 Subject: [PATCH] =?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)