From 519c63a0233ce807f3803aa2a497ab3e3d3e6178 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 00:52:34 +0900 Subject: [PATCH 01/10] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=99=88=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=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 --- .../sodalive/configs/SecurityConfig.kt | 2 + .../main/banner/AudioContentBannerService.kt | 6 +- .../home/AudioContentMainTabHomeController.kt | 7 +- .../home/AudioContentMainTabHomeService.kt | 14 ++-- .../sodalive/rank/RankingRepository.kt | 74 +++++++++++++------ .../vividnext/sodalive/rank/RankingService.kt | 16 ++-- 6 files changed, 75 insertions(+), 44 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index 6423bda..5c5784d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -74,6 +74,8 @@ class SecurityConfig( .antMatchers("/stplat/terms_of_service").permitAll() .antMatchers("/stplat/privacy_policy").permitAll() .antMatchers("/charge/ads").permitAll() + .antMatchers("/v2/audio-content/main/home").permitAll() + .antMatchers("/v2/audio-content/main/home/popular-content-by-creator").permitAll() .anyRequest().authenticated() .and() .build() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/banner/AudioContentBannerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/banner/AudioContentBannerService.kt index 022a888..6226b23 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/banner/AudioContentBannerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/banner/AudioContentBannerService.kt @@ -13,12 +13,12 @@ class AudioContentBannerService( @Value("\${cloud.aws.cloud-front.host}") private val imageHost: String ) { - fun getBannerList(tabId: Long, memberId: Long, isAdult: Boolean): List { + fun getBannerList(tabId: Long, memberId: Long?, isAdult: Boolean): List { return repository.getAudioContentMainBannerList(tabId, isAdult) .filter { - if (it.type == AudioContentBannerType.CREATOR && it.creator != null) { + if (it.type == AudioContentBannerType.CREATOR && it.creator != null && memberId != null) { !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.creator!!.id!!) - } else if (it.type == AudioContentBannerType.SERIES && it.series != null) { + } else if (it.type == AudioContentBannerType.SERIES && it.series != null && memberId != null) { !blockMemberRepository.isBlocked(blockedMemberId = memberId, memberId = it.series!!.member!!.id!!) } else { true diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt index b2ca129..a743dce 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt @@ -1,7 +1,6 @@ package kr.co.vividnext.sodalive.content.main.tab.home 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.member.Member import org.springframework.security.core.annotation.AuthenticationPrincipal @@ -19,8 +18,6 @@ class AudioContentMainTabHomeController(private val service: AudioContentMainTab @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok( service.fetchData( isAdultContentVisible = isAdultContentVisible ?: true, @@ -37,12 +34,10 @@ class AudioContentMainTabHomeController(private val service: AudioContentMainTab @RequestParam("contentType", required = false) contentType: ContentType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok( service.getPopularContentByCreator( creatorId = creatorId, - isAdult = member.auth != null && (isAdultContentVisible ?: true), + isAdult = member?.auth != null && (isAdultContentVisible ?: true), contentType = contentType ?: ContentType.ALL ) ) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt index 7179cd3..42dd140 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt @@ -23,7 +23,7 @@ class AudioContentMainTabHomeService( fun fetchData( isAdultContentVisible: Boolean, contentType: ContentType, - member: Member + member: Member? ): GetContentMainTabHomeResponse { // 주간 랭킹 기간 val currentDateTime = LocalDateTime.now() @@ -42,7 +42,7 @@ class AudioContentMainTabHomeService( val formattedLastMonday = startDate.format(startDateFormatter) val formattedLastSunday = endDate.format(endDateFormatter) - val isAdult = member.auth != null && isAdultContentVisible + val isAdult = member?.auth != null && isAdultContentVisible // 최근 공지사항 val latestNotice = noticeService.getLatestNotice() @@ -50,19 +50,19 @@ class AudioContentMainTabHomeService( // 메인 배너 (홈) val contentBannerList = bannerService.getBannerList( tabId = 1, - memberId = member.id!!, + memberId = member?.id, isAdult = isAdult ) // 인기 크리에이터 val rankCreatorList = rankingService.getCreatorRanking( - memberId = member.id!!, + memberId = member?.id, rankingDate = "$formattedLastMonday ~ $formattedLastSunday" ) // 인기 시리즈 val rankSeriesList = rankingService.getSeriesRanking( - memberId = member.id!!, + memberId = member?.id, isAdult = isAdult, contentType = contentType, startDate = startDate.minusDays(1), @@ -71,7 +71,7 @@ class AudioContentMainTabHomeService( // 인기 콘텐츠 val rankContentList = rankingService.getContentRanking( - memberId = member.id!!, + memberId = member?.id, isAdult = isAdult, contentType = contentType, startDate = startDate.minusDays(1), @@ -82,7 +82,7 @@ class AudioContentMainTabHomeService( val eventBannerList = eventService.getEventList(isAdult = isAdult) val contentRankCreatorList = rankingService.fetchCreatorBySellContentCountRankTop20( - memberId = member.id!!, + memberId = member?.id, isAdult = isAdult, contentType = contentType, startDate = startDate.minusDays(1), diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt index b0639c1..1e7da14 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt @@ -43,7 +43,7 @@ class RankingRepository( } fun getAudioContentRanking( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, @@ -110,7 +110,40 @@ class RankingRepository( .innerJoin(audioContentComment.audioContent, audioContent) .innerJoin(audioContent.member, member) .innerJoin(audioContent.theme, audioContentTheme) - .leftJoin(blockMember).on(blockMemberCondition) + } + + "댓글" -> { + select + .from(audioContentComment) + .innerJoin(audioContentComment.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .innerJoin(audioContent.theme, audioContentTheme) + } + + "좋아요" -> { + select + .from(audioContentLike) + .innerJoin(audioContentLike.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .innerJoin(audioContent.theme, audioContentTheme) + } + + else -> { + select + .from(order) + .innerJoin(order.audioContent, audioContent) + .innerJoin(audioContent.member, member) + .innerJoin(audioContent.theme, audioContentTheme) + } + } + + if (memberId != null) { + select = select.leftJoin(blockMember).on(blockMemberCondition) + } + + select = when (sortType) { + "후원" -> { + select .where( where .and(audioContentComment.isActive.isTrue) @@ -124,11 +157,6 @@ class RankingRepository( "댓글" -> { select - .from(audioContentComment) - .innerJoin(audioContentComment.audioContent, audioContent) - .innerJoin(audioContent.member, member) - .innerJoin(audioContent.theme, audioContentTheme) - .leftJoin(blockMember).on(blockMemberCondition) .where( where .and(audioContentComment.isActive.isTrue) @@ -141,11 +169,6 @@ class RankingRepository( "좋아요" -> { select - .from(audioContentLike) - .innerJoin(audioContentLike.audioContent, audioContent) - .innerJoin(audioContent.member, member) - .innerJoin(audioContent.theme, audioContentTheme) - .leftJoin(blockMember).on(blockMemberCondition) .where( where .and(audioContentLike.isActive.isTrue) @@ -158,11 +181,6 @@ class RankingRepository( else -> { select - .from(order) - .innerJoin(order.audioContent, audioContent) - .innerJoin(audioContent.member, member) - .innerJoin(audioContent.theme, audioContentTheme) - .leftJoin(blockMember).on(blockMemberCondition) .where( where .and(order.isActive.isTrue) @@ -181,7 +199,7 @@ class RankingRepository( } fun getSeriesRanking( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, @@ -221,14 +239,19 @@ class RankingRepository( } } - return queryFactory + var select = queryFactory .select(series) .from(seriesContent) .innerJoin(seriesContent.series, series) .innerJoin(seriesContent.content, audioContent) .innerJoin(series.member, member) .leftJoin(order).on(audioContent.id.eq(order.audioContent.id)) - .leftJoin(blockMember).on(blockMemberCondition) + + if (memberId != null) { + select = select.leftJoin(blockMember).on(blockMemberCondition) + } + + return select .where(where) .groupBy(series.id) .orderBy( @@ -408,7 +431,7 @@ class RankingRepository( } fun fetchCreatorBySellContentCountRankTop20( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, @@ -451,7 +474,7 @@ class RankingRepository( } } - return queryFactory + var select = queryFactory .select( QContentCreatorResponse( member.id, @@ -462,7 +485,12 @@ class RankingRepository( .from(audioContent) .innerJoin(member).on(memberCondition) .leftJoin(order).on(ordersCondition) - .leftJoin(blockMember).on(blockMemberCondition) + + if (memberId != null) { + select = select.leftJoin(blockMember).on(blockMemberCondition) + } + + return select .where(where) .groupBy(member.id) .having(audioContent.id.count().goe(4)) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt index 91a46e4..7b5fdeb 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingService.kt @@ -23,10 +23,16 @@ class RankingService( @Value("\${cloud.aws.cloud-front.host}") private val imageHost: String ) { - fun getCreatorRanking(memberId: Long, rankingDate: String): GetExplorerSectionResponse { + fun getCreatorRanking(memberId: Long?, rankingDate: String): GetExplorerSectionResponse { val creatorRankings = repository .getCreatorRankings() - .filter { !memberService.isBlocked(blockedMemberId = memberId, memberId = it.id!!) } + .filter { + if (memberId != null) { + !memberService.isBlocked(blockedMemberId = memberId, memberId = it.id!!) + } else { + true + } + } .map { it.toExplorerSectionCreator(imageHost) } return GetExplorerSectionResponse( @@ -39,7 +45,7 @@ class RankingService( } fun getContentRanking( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, @@ -71,7 +77,7 @@ class RankingService( } fun getSeriesRanking( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, @@ -211,7 +217,7 @@ class RankingService( } fun fetchCreatorBySellContentCountRankTop20( - memberId: Long, + memberId: Long?, isAdult: Boolean, contentType: ContentType, startDate: LocalDateTime, -- 2.40.1 From 82afdecf6cb9abb9bfd5d9042c827b8ea15db868 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 01:38:32 +0900 Subject: [PATCH 02/10] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=99=88=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=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 --- .../sodalive/rank/RankingRepository.kt | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt index 1e7da14..816c422 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt @@ -53,9 +53,13 @@ class RankingRepository( sortType: String, theme: String = "" ): List { - val blockMemberCondition = blockMember.member.id.eq(member.id) - .and(blockMember.isActive.isTrue) - .and(blockMember.blockedMember.id.eq(memberId)) + val blockMemberCondition = if (memberId != null) { + blockMember.member.id.eq(member.id) + .and(blockMember.isActive.isTrue) + .and(blockMember.blockedMember.id.eq(memberId)) + } else { + null + } var where = audioContent.isActive.isTrue .and(audioContent.member.isActive.isTrue) @@ -205,9 +209,13 @@ class RankingRepository( startDate: LocalDateTime, endDate: LocalDateTime ): List { - val blockMemberCondition = blockMember.member.id.eq(member.id) - .and(blockMember.isActive.isTrue) - .and(blockMember.blockedMember.id.eq(memberId)) + val blockMemberCondition = if (memberId != null) { + blockMember.member.id.eq(member.id) + .and(blockMember.isActive.isTrue) + .and(blockMember.blockedMember.id.eq(memberId)) + } else { + null + } var where = series.isActive.isTrue .and(audioContent.isActive.isTrue) @@ -437,9 +445,13 @@ class RankingRepository( startDate: LocalDateTime, endDate: LocalDateTime ): List { - val blockMemberCondition = blockMember.member.id.eq(member.id) - .and(blockMember.isActive.isTrue) - .and(blockMember.blockedMember.id.eq(memberId)) + val blockMemberCondition = if (memberId != null) { + blockMember.member.id.eq(member.id) + .and(blockMember.isActive.isTrue) + .and(blockMember.blockedMember.id.eq(memberId)) + } else { + null + } val ordersCondition = order.audioContent.id.eq(audioContent.id) .and(order.isActive.isTrue) -- 2.40.1 From 387d36486107d6f8c3d8373e09c5b8ab1282e267 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 01:50:00 +0900 Subject: [PATCH 03/10] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=99=88=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=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 --- .../kr/co/vividnext/sodalive/rank/RankingRepository.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt index 816c422..9b3e6f7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/rank/RankingRepository.kt @@ -68,7 +68,6 @@ class RankingRepository( .and(audioContent.duration.isNotNull) .and(audioContentTheme.isActive.isTrue) .and(audioContent.limited.isNull) - .and(blockMember.id.isNull) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) @@ -142,6 +141,7 @@ class RankingRepository( } if (memberId != null) { + where = where.and(blockMember.id.isNull) select = select.leftJoin(blockMember).on(blockMemberCondition) } @@ -224,7 +224,6 @@ class RankingRepository( .and(member.role.eq(MemberRole.CREATOR)) .and(audioContent.duration.isNotNull) .and(audioContent.limited.isNull) - .and(blockMember.id.isNull) .and(order.isActive.isTrue) .and(order.createdAt.goe(startDate)) .and(order.createdAt.lt(endDate)) @@ -256,6 +255,7 @@ class RankingRepository( .leftJoin(order).on(audioContent.id.eq(order.audioContent.id)) if (memberId != null) { + where = where.and(blockMember.id.isNull) select = select.leftJoin(blockMember).on(blockMemberCondition) } @@ -466,7 +466,6 @@ class RankingRepository( .and(audioContent.price.gt(0)) .and(audioContent.duration.isNotNull) .and(audioContent.limited.isNull) - .and(blockMember.id.isNull) if (!isAdult) { where = where.and(audioContent.isAdult.isFalse) @@ -499,6 +498,7 @@ class RankingRepository( .leftJoin(order).on(ordersCondition) if (memberId != null) { + where = where.and(blockMember.id.isNull) select = select.leftJoin(blockMember).on(blockMemberCondition) } -- 2.40.1 From dc74d203bdab72f49a8f803dc5d789e068f6c3ca Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 02:42:44 +0900 Subject: [PATCH 04/10] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=99=88=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=9D=B8=EA=B8=B0=20=EB=8B=A8=ED=8E=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80=EB=8A=A5=ED=95=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 --- .../kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt | 1 + .../co/vividnext/sodalive/content/AudioContentController.kt | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index 5c5784d..eab7a92 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -76,6 +76,7 @@ class SecurityConfig( .antMatchers("/charge/ads").permitAll() .antMatchers("/v2/audio-content/main/home").permitAll() .antMatchers("/v2/audio-content/main/home/popular-content-by-creator").permitAll() + .antMatchers("/audio-content/ranking").permitAll() .anyRequest().authenticated() .and() .build() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt index 53ad914..4b4549a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -184,8 +184,6 @@ class AudioContentController(private val service: AudioContentService) { @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - val currentDateTime = LocalDateTime.now() val startDate = currentDateTime .withHour(15) @@ -198,7 +196,7 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok( service.getAudioContentRanking( - isAdult = member.auth != null && (isAdultContentVisible ?: true), + isAdult = member?.auth != null && (isAdultContentVisible ?: true), contentType = contentType ?: ContentType.ALL, startDate = startDate, endDate = endDate, -- 2.40.1 From ec0252bae01fbde4555e257b01cc964317dc399c Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 03:16:54 +0900 Subject: [PATCH 05/10] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=ED=99=88=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=9D=B8=EA=B8=B0=20=EB=8B=A8=ED=8E=B8=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80=EB=8A=A5=ED=95=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 --- .../sodalive/configs/SecurityConfig.kt | 2 +- .../home/AudioContentMainTabHomeController.kt | 17 +++++++++++ .../home/AudioContentMainTabHomeService.kt | 28 +++++++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index eab7a92..e23ce6e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -76,7 +76,7 @@ class SecurityConfig( .antMatchers("/charge/ads").permitAll() .antMatchers("/v2/audio-content/main/home").permitAll() .antMatchers("/v2/audio-content/main/home/popular-content-by-creator").permitAll() - .antMatchers("/audio-content/ranking").permitAll() + .antMatchers("/v2/audio-content/main/home/content/ranking").permitAll() .anyRequest().authenticated() .and() .build() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt index a743dce..5015035 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeController.kt @@ -42,4 +42,21 @@ class AudioContentMainTabHomeController(private val service: AudioContentMainTab ) ) } + + @GetMapping("/content/ranking") + fun getContentRanking( + @RequestParam("sort-type", required = false) sortType: String? = "매출", + @RequestParam("isAdultContentVisible", required = false) isAdultContentVisible: Boolean? = null, + @RequestParam("contentType", required = false) contentType: ContentType? = null, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + ApiResponse.ok( + service.getContentRanking( + sortType = sortType ?: "매출", + isAdultContentVisible = isAdultContentVisible ?: true, + contentType = contentType ?: ContentType.ALL, + member + ) + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt index 42dd140..f86f0a9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/AudioContentMainTabHomeService.kt @@ -123,4 +123,32 @@ class AudioContentMainTabHomeService( contentType = contentType ) } + + fun getContentRanking( + sortType: String, + isAdultContentVisible: Boolean, + contentType: ContentType, + member: Member? + ): List { + val isAdult = member?.auth != null && isAdultContentVisible + + val currentDateTime = LocalDateTime.now() + val startDate = currentDateTime + .withHour(15) + .withMinute(0) + .withSecond(0) + .minusWeeks(1) + .with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY)) + val endDate = startDate + .plusDays(6) + + return rankingService.getContentRanking( + memberId = member?.id, + isAdult = isAdult, + contentType = contentType, + startDate = startDate.minusDays(1), + endDate = endDate, + sortType = sortType + ) + } } -- 2.40.1 From f9f9b9aab9db1dcbf85647518f34d115d22734d3 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 04:39:54 +0900 Subject: [PATCH 06/10] =?UTF-8?q?FAQ=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20?= =?UTF-8?q?=EC=97=86=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=EA=B0=80=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=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 --- .../kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt | 3 +++ src/main/kotlin/kr/co/vividnext/sodalive/faq/FaqController.kt | 2 +- .../kr/co/vividnext/sodalive/notice/ServiceNoticeController.kt | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index e23ce6e..6af8db9 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -8,6 +8,7 @@ import kr.co.vividnext.sodalive.jwt.JwtFilter import kr.co.vividnext.sodalive.jwt.TokenProvider import org.springframework.context.annotation.Bean import org.springframework.context.annotation.Configuration +import org.springframework.http.HttpMethod import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity import org.springframework.security.config.annotation.web.builders.HttpSecurity import org.springframework.security.config.annotation.web.builders.WebSecurity @@ -77,6 +78,8 @@ class SecurityConfig( .antMatchers("/v2/audio-content/main/home").permitAll() .antMatchers("/v2/audio-content/main/home/popular-content-by-creator").permitAll() .antMatchers("/v2/audio-content/main/home/content/ranking").permitAll() + .antMatchers(HttpMethod.GET, "/faq").permitAll() + .antMatchers(HttpMethod.GET, "/faq/category").permitAll() .anyRequest().authenticated() .and() .build() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/faq/FaqController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/faq/FaqController.kt index 195d3ea..729667a 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/faq/FaqController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/faq/FaqController.kt @@ -31,7 +31,7 @@ class FaqController(private val service: FaqService) { @DeleteMapping("/{id}") @PreAuthorize("hasRole('ADMIN')") - fun deleteCan(@PathVariable id: Long) = ApiResponse.ok(service.delete(id), "삭제되었습니다.") + fun deleteFaq(@PathVariable id: Long) = ApiResponse.ok(service.delete(id), "삭제되었습니다.") @GetMapping fun getFaqList(@RequestParam("category") category: String) = ApiResponse.ok(service.getFaqList(category)) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeController.kt index e4f258f..f93eeaf 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeController.kt @@ -31,7 +31,7 @@ class ServiceNoticeController(private val service: ServiceNoticeService) { @DeleteMapping("/{id}") @PreAuthorize("hasRole('ADMIN')") - fun deleteCan(@PathVariable id: Long) = ApiResponse.ok(service.delete(id), "삭제되었습니다.") + fun deleteNotice(@PathVariable id: Long) = ApiResponse.ok(service.delete(id), "삭제되었습니다.") @GetMapping fun getNoticeList(pageable: Pageable, timezone: String) = ApiResponse.ok(service.getNoticeList(pageable, timezone)) -- 2.40.1 From 0764247447a5ad6a0ab7ad9dac4a6c18ce809715 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 05:09:08 +0900 Subject: [PATCH 07/10] =?UTF-8?q?=EC=98=A4=EB=94=94=EC=85=98=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=86?= =?UTF-8?q?=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=95=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 --- .../kr/co/vividnext/sodalive/audition/AuditionController.kt | 4 +--- .../kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt | 1 + 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionController.kt index ce4593c..527d4f1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/audition/AuditionController.kt @@ -18,13 +18,11 @@ class AuditionController(private val service: AuditionService) { @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok( service.getAuditionList( offset = pageable.offset, limit = pageable.pageSize.toLong(), - isAdult = member.auth != null + isAdult = member?.auth != null ) ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index 6af8db9..efe74dc 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -80,6 +80,7 @@ class SecurityConfig( .antMatchers("/v2/audio-content/main/home/content/ranking").permitAll() .antMatchers(HttpMethod.GET, "/faq").permitAll() .antMatchers(HttpMethod.GET, "/faq/category").permitAll() + .antMatchers("/audition").permitAll() .anyRequest().authenticated() .and() .build() -- 2.40.1 From 6dd6be183bd7c99ceeff7bc33e81fbb8604c91b0 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 06:10:28 +0900 Subject: [PATCH 08/10] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=86?= =?UTF-8?q?=EC=9D=B4=20=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=95=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 --- .../sodalive/configs/SecurityConfig.kt | 4 ++ .../live/recommend/LiveRecommendController.kt | 4 -- .../live/recommend/LiveRecommendRepository.kt | 3 -- .../live/recommend/LiveRecommendService.kt | 37 +++++++++++++------ 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt index efe74dc..f9e5969 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/configs/SecurityConfig.kt @@ -81,6 +81,10 @@ class SecurityConfig( .antMatchers(HttpMethod.GET, "/faq").permitAll() .antMatchers(HttpMethod.GET, "/faq/category").permitAll() .antMatchers("/audition").permitAll() + .antMatchers("/live/recommend/channel").permitAll() + .antMatchers(HttpMethod.GET, "/live/room").permitAll() + .antMatchers(HttpMethod.GET, "/event").permitAll() + .antMatchers(HttpMethod.GET, "/live/recommend").permitAll() .anyRequest().authenticated() .and() .build() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendController.kt index a7c005c..3b8a252 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendController.kt @@ -16,8 +16,6 @@ class LiveRecommendController(private val service: LiveRecommendService) { fun getRecommendLive( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getRecommendLive(member)) } @@ -25,8 +23,6 @@ class LiveRecommendController(private val service: LiveRecommendService) { fun getRecommendChannelList( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok(service.getRecommendChannelList(member)) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt index b3c3bf5..88ed214 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendRepository.kt @@ -20,7 +20,6 @@ class LiveRecommendRepository( private val cloudFrontHost: String ) { fun getRecommendLive( - memberId: Long, isBlocked: (Long) -> Boolean, isAdult: Boolean ): List { @@ -51,7 +50,6 @@ class LiveRecommendRepository( } fun getOnAirRecommendChannelList( - memberId: Long, isBlocked: (Long) -> Boolean, isCreator: Boolean, isAdult: Boolean @@ -95,7 +93,6 @@ class LiveRecommendRepository( } fun getRecommendChannelList( - memberId: Long, withOutCreatorList: List, limit: Long, isBlocked: (Long) -> Boolean diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt index 5ec9478..67d86fa 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/recommend/LiveRecommendService.kt @@ -12,20 +12,30 @@ class LiveRecommendService( private val blockMemberRepository: BlockMemberRepository ) { - fun getRecommendLive(member: Member): List { + fun getRecommendLive(member: Member?): List { return repository.getRecommendLive( - memberId = member.id!!, - isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }, - isAdult = member.auth != null + isBlocked = { + if (member != null) { + blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) + } else { + false + } + }, + isAdult = member?.auth != null ) } - fun getRecommendChannelList(member: Member): List { + fun getRecommendChannelList(member: Member?): List { val onAirChannelList = repository.getOnAirRecommendChannelList( - member.id!!, - isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) }, - isCreator = member.role == MemberRole.CREATOR, - isAdult = member.auth != null + isBlocked = { + if (member != null) { + blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) + } else { + false + } + }, + isCreator = member?.role == MemberRole.CREATOR, + isAdult = member?.auth != null ) if (onAirChannelList.size >= 20) { @@ -35,10 +45,15 @@ class LiveRecommendService( val onAirCreatorIdList = onAirChannelList.map { it.creatorId } val notOnAirCreatorList = repository.getRecommendChannelList( - member.id!!, withOutCreatorList = onAirCreatorIdList, limit = (20 - onAirChannelList.size).toLong(), - isBlocked = { blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) } + isBlocked = { + if (member != null) { + blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it) + } else { + false + } + } ) return onAirChannelList + notOnAirCreatorList -- 2.40.1 From 3ff84074bd7af450c0d67666b83fe16ebd37652c Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 06:26:17 +0900 Subject: [PATCH 09/10] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9?= =?UTF-8?q?=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=86=EC=9D=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=95=98=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 | 2 - .../sodalive/live/room/LiveRoomRepository.kt | 18 ++++---- .../sodalive/live/room/LiveRoomService.kt | 42 ++++++++++++------- 3 files changed, 36 insertions(+), 26 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 6874e68..74b9bae 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 @@ -38,8 +38,6 @@ class LiveRoomController( @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { - if (member == null) throw SodaException("로그인 정보를 확인해주세요.") - ApiResponse.ok( service.getRoomList( dateString, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt index e06153b..9a32539 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt @@ -29,7 +29,7 @@ interface LiveRoomQueryRepository { offset: Long, limit: Long, timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List @@ -38,14 +38,14 @@ interface LiveRoomQueryRepository { date: LocalDateTime, offset: Long, limit: Long, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List fun getLiveRoomListReservationWithoutDate( timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List @@ -72,7 +72,7 @@ class LiveRoomQueryRepositoryImpl( offset: Long, limit: Long, timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { @@ -85,7 +85,7 @@ class LiveRoomQueryRepositoryImpl( where = where.and(liveRoom.isAdult.isFalse) } - if (isCreator) { + if (isCreator && memberId != null) { where = where.and( liveRoom.isAvailableJoinCreator.isTrue .or(liveRoom.member.id.eq(memberId)) @@ -112,7 +112,7 @@ class LiveRoomQueryRepositoryImpl( date: LocalDateTime, offset: Long, limit: Long, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { @@ -129,7 +129,7 @@ class LiveRoomQueryRepositoryImpl( where = where.and(liveRoom.isAdult.isFalse) } - if (isCreator) { + if (isCreator && memberId != null) { where = where.and( liveRoom.isAvailableJoinCreator.isTrue .or(liveRoom.member.id.eq(memberId)) @@ -148,7 +148,7 @@ class LiveRoomQueryRepositoryImpl( override fun getLiveRoomListReservationWithoutDate( timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { @@ -169,7 +169,7 @@ class LiveRoomQueryRepositoryImpl( where = where.and(liveRoom.isAdult.isFalse) } - if (isCreator) { + if (isCreator && memberId != null) { where = where.and( liveRoom.isAvailableJoinCreator.isTrue .or(liveRoom.member.id.eq(memberId)) 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 37ecf7b..8a2b52e 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 @@ -118,42 +118,54 @@ class LiveRoomService( status: LiveRoomStatus, isAdultContentVisible: Boolean, pageable: Pageable, - member: Member, + member: Member?, timezone: String ): List { val roomList = if (status == LiveRoomStatus.NOW) { getLiveRoomListNow( pageable, timezone, - memberId = member.id!!, - isCreator = member.role == MemberRole.CREATOR, - isAdult = member.auth != null && isAdultContentVisible + memberId = member?.id, + isCreator = member?.role == MemberRole.CREATOR, + isAdult = member?.auth != null && isAdultContentVisible ) } else if (dateString != null) { getLiveRoomListReservationWithDate( dateString, pageable, timezone, - memberId = member.id!!, - isCreator = member.role == MemberRole.CREATOR, - isAdult = member.auth != null && isAdultContentVisible + memberId = member?.id, + isCreator = member?.role == MemberRole.CREATOR, + isAdult = member?.auth != null && isAdultContentVisible ) } else { getLiveRoomListReservationWithoutDate( timezone, - isCreator = member.role == MemberRole.CREATOR, - memberId = member.id!!, - isAdult = member.auth != null && isAdultContentVisible + isCreator = member?.role == MemberRole.CREATOR, + memberId = member?.id, + isAdult = member?.auth != null && isAdultContentVisible ) } return roomList - .filter { !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) } + .filter { + if (member?.id != null) { + !blockMemberRepository.isBlocked(blockedMemberId = member.id!!, memberId = it.member!!.id!!) + } else { + true + } + } .map { val roomInfo = roomInfoRepository.findByIdOrNull(it.id!!) val reservations = it.reservations - .filter { reservation -> reservation.member!!.id!! == member.id!! && reservation.isActive } + .filter { reservation -> + if (member?.id != null) { + reservation.member!!.id!! == member.id!! && reservation.isActive + } else { + true + } + } val beginDateTime = it.beginDateTime .atZone(ZoneId.of("UTC")) @@ -202,7 +214,7 @@ class LiveRoomService( private fun getLiveRoomListNow( pageable: Pageable, timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { @@ -220,7 +232,7 @@ class LiveRoomService( dateString: String, pageable: Pageable, timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { @@ -242,7 +254,7 @@ class LiveRoomService( private fun getLiveRoomListReservationWithoutDate( timezone: String, - memberId: Long, + memberId: Long?, isCreator: Boolean, isAdult: Boolean ): List { -- 2.40.1 From 3595c02e744845d321f9aec361831fa60cda3841 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sat, 22 Mar 2025 06:37:20 +0900 Subject: [PATCH 10/10] =?UTF-8?q?=EB=9D=BC=EC=9D=B4=EB=B8=8C=20=EB=B0=A9?= =?UTF-8?q?=20-=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=EC=97=86=EC=9D=B4=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20=EA=B0=80=EB=8A=A5=ED=95=98=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/LiveRoomRepository.kt | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt index 9a32539..a648fe2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/live/room/LiveRoomRepository.kt @@ -176,18 +176,24 @@ class LiveRoomQueryRepositoryImpl( ) } - return queryFactory - .selectFrom(liveRoom) - .innerJoin(liveRoom.member, member) - .limit(10) - .where(where) - .orderBy( + val orderBy = if (memberId != null) { + listOf( CaseBuilder() .`when`(member.id.eq(memberId)).then(1) .otherwise(2) .asc(), liveRoom.beginDateTime.asc() ) + } else { + listOf(liveRoom.beginDateTime.asc()) + } + + return queryFactory + .selectFrom(liveRoom) + .innerJoin(liveRoom.member, member) + .limit(10) + .where(where) + .orderBy(*orderBy.toTypedArray()) .fetch() } -- 2.40.1