From 72563e9bfa053c9dcad0a02e9ef87a446ce9d06c Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 4 Dec 2024 10:55:17 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=BD=98=ED=85=90=EC=B8=A0=20=EA=B0=80?= =?UTF-8?q?=EC=A0=B8=EC=98=A4=EA=B8=B0=20API=20-=20=EB=B9=A0=EC=A7=84=20?= =?UTF-8?q?=EC=A1=B0=EA=B1=B4=EB=AC=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/content/AudioContentRepository.kt | 1 + 1 file changed, 1 insertion(+) 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 628d5b3..d48ff84 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -802,6 +802,7 @@ class AudioContentQueryRepositoryImpl( ) .from(audioContent) .innerJoin(audioContent.theme, audioContentTheme) + .where(audioContent.id.`in`(contentIdList)) .fetch() } -- 2.40.1 From 72cb90357e56927ac5be96329de040d7796ed16b Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 4 Dec 2024 10:59:43 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=ED=94=8C=EB=A0=88=EC=9D=B4=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=83=9D=EC=84=B1=20API=20-=20=EC=9C=A0?= =?UTF-8?q?=ED=9A=A8=EC=84=B1=20=EA=B2=80=EC=82=AC=20-=20=EC=BD=98?= =?UTF-8?q?=ED=85=90=EC=B8=A0=EA=B0=80=201=EA=B0=9C=20=EC=9D=B4=EC=83=81?= =?UTF-8?q?=20=EB=93=B1=EB=A1=9D=EB=90=98=EC=96=B4=20=EC=9E=88=EC=96=B4?= =?UTF-8?q?=EC=95=BC=20=ED=95=9C=EB=8B=A4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/playlist/AudioContentPlaylistService.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt index 4bc76ce..e4594be 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt @@ -28,7 +28,7 @@ class AudioContentPlaylistService( } // 콘텐츠 유효성 검사 (소장으로 구매한 콘텐츠 인가?) - checkOrderedContent( + validateContent( contentIdList = request.contentIdAndOrderList.map { it.contentId }, memberId = member.id!! ) @@ -44,6 +44,17 @@ class AudioContentPlaylistService( redisRepository.save(playlist) } + private fun validateContent(contentIdList: List, memberId: Long) { + if (contentIdList.isEmpty()) { + throw SodaException("콘텐츠를 1개 이상 추가하세요") + } + + checkOrderedContent( + contentIdList = contentIdList, + memberId = memberId + ) + } + private fun checkOrderedContent(contentIdList: List, memberId: Long) { val orderedContentIdList = orderRepository.findOrderedContent(contentIdList, memberId).toSet() val orderedContentMap = contentIdList.associateWith { it in orderedContentIdList } -- 2.40.1 From 8a03249759a3d0a9e4e9794175a27fec6ae8d85d Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 4 Dec 2024 11:18:42 +0900 Subject: [PATCH 3/9] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=BB=A4?= =?UTF-8?q?=EB=B2=84=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A1=B0=ED=9A=8C=20API?= =?UTF-8?q?=20-=20=EB=B9=A0=EC=A7=84=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/content/AudioContentRepository.kt | 1 + 1 file changed, 1 insertion(+) 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 d48ff84..1810577 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -810,6 +810,7 @@ class AudioContentQueryRepositoryImpl( return queryFactory .select(audioContent.coverImage.prepend("/").prepend(imageHost)) .from(audioContent) + .where(audioContent.id.eq(id)) .fetchFirst() } } -- 2.40.1 From 4ff5e9e163678f2051b48a9c068eb99647d22c2f Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 4 Dec 2024 13:32:35 +0900 Subject: [PATCH 4/9] =?UTF-8?q?=EC=9E=AC=EC=83=9D=20=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20=EC=A1=B0=ED=9A=8C=20-=20?= =?UTF-8?q?=ED=81=AC=EB=A6=AC=EC=97=90=EC=9D=B4=ED=84=B0=20=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../co/vividnext/sodalive/content/AudioContentRepository.kt | 4 +++- .../sodalive/content/playlist/AudioContentPlaylist.kt | 3 ++- 2 files changed, 5 insertions(+), 2 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 1810577..6898b77 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -797,10 +797,12 @@ class AudioContentQueryRepositoryImpl( audioContent.title, audioContentTheme.theme, audioContent.coverImage.prepend("/").prepend(imageHost), - audioContent.duration + audioContent.duration, + member.nickname ) ) .from(audioContent) + .innerJoin(audioContent.member, member) .innerJoin(audioContent.theme, audioContentTheme) .where(audioContent.id.`in`(contentIdList)) .fetch() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt index d9dd2ec..9343689 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt @@ -29,5 +29,6 @@ data class AudioContentPlaylistContent @QueryProjection constructor( val title: String, val category: String, val coverUrl: String, - val duration: String + val duration: String, + val creatorNickname: String ) -- 2.40.1 From ba1709553683f52874d4f3072d1eb275a58855bd Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 4 Dec 2024 18:44:17 +0900 Subject: [PATCH 5/9] =?UTF-8?q?=EA=B5=AC=EB=A7=A4=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=A1=B0=ED=9A=8C=20-=20=EA=B5=AC=EB=A7=A4=EC=9C=A0=ED=98=95?= =?UTF-8?q?=EB=B3=84=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EB=8F=84=EB=A1=9D=20orderType=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/order/OrderController.kt | 3 + .../sodalive/content/order/OrderRepository.kt | 88 +++++++++++++------ .../sodalive/content/order/OrderService.kt | 3 + 3 files changed, 68 insertions(+), 26 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt index 89c1e08..889e6ed 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderController.kt @@ -9,6 +9,7 @@ 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 @RestController @@ -33,6 +34,7 @@ class OrderController(private val service: OrderService) { @GetMapping("/audio-content") fun getAudioContentOrderList( + @RequestParam(value = "orderType", required = false) orderType: OrderType? = null, @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?, pageable: Pageable ) = run { @@ -40,6 +42,7 @@ class OrderController(private val service: OrderService) { ApiResponse.ok( service.getAudioContentOrderList( + orderType = orderType, member = member, offset = pageable.offset, limit = pageable.pageSize.toLong() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt index fb6022a..4c7887b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderRepository.kt @@ -20,6 +20,7 @@ interface OrderQueryRepository { fun isExistOrderedAndOrderType(memberId: Long, contentId: Long): Pair fun getAudioContentRemainingTime(memberId: Long, contentId: Long, timezone: String): String fun getAudioContentOrderList( + orderType: OrderType?, dateTime: LocalDateTime, coverImageHost: String, memberId: Long, @@ -27,7 +28,7 @@ interface OrderQueryRepository { limit: Long = 10 ): List - fun totalAudioContentOrderListCount(memberId: Long, dateTime: LocalDateTime): Int + fun totalAudioContentOrderListCount(orderType: OrderType?, memberId: Long, dateTime: LocalDateTime): Int fun getAudioContentMainOrderList( dateTime: LocalDateTime, coverImageHost: String, @@ -117,12 +118,41 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde } override fun getAudioContentOrderList( + orderType: OrderType?, dateTime: LocalDateTime, coverImageHost: String, memberId: Long, offset: Long, limit: Long ): List { + var where = order.member.id.eq(memberId) + .and(order.isActive.isTrue) + + when (orderType) { + OrderType.RENTAL -> { + where = where.and( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + } + + OrderType.KEEP -> { + where = where.and(order.type.eq(OrderType.KEEP)) + } + + null -> { + where = where.and( + order.type.eq(OrderType.KEEP) + .or( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + ) + } + } + return queryFactory .select( QGetAudioContentOrderListItem( @@ -141,39 +171,45 @@ class OrderQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : Orde ) .from(order) .innerJoin(order.audioContent, audioContent) - .where( - order.member.id.eq(memberId) - .and(order.isActive.isTrue) - .and( - order.type.eq(OrderType.KEEP) - .or( - order.type.eq(OrderType.RENTAL) - .and(order.startDate.before(dateTime)) - .and(order.endDate.after(dateTime)) - ) - ) - ) + .where(where) .offset(offset) .limit(limit) .orderBy(order.createdAt.desc()) .fetch() } - override fun totalAudioContentOrderListCount(memberId: Long, dateTime: LocalDateTime): Int { + override fun totalAudioContentOrderListCount(orderType: OrderType?, memberId: Long, dateTime: LocalDateTime): Int { + var where = order.member.id.eq(memberId) + .and(order.isActive.isTrue) + + when (orderType) { + OrderType.RENTAL -> { + where = where.and( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + } + + OrderType.KEEP -> { + where = where.and(order.type.eq(OrderType.KEEP)) + } + + null -> { + where = where.and( + order.type.eq(OrderType.KEEP) + .or( + order.type.eq(OrderType.RENTAL) + .and(order.startDate.before(dateTime)) + .and(order.endDate.after(dateTime)) + ) + ) + } + } + return queryFactory.select(order.id) .from(order) - .where( - order.member.id.eq(memberId) - .and(order.isActive.isTrue) - .and( - order.type.eq(OrderType.KEEP) - .or( - order.type.eq(OrderType.RENTAL) - .and(order.startDate.before(dateTime)) - .and(order.endDate.after(dateTime)) - ) - ) - ) + .where(where) .fetch() .size } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt index 630b22a..620aaaa 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/order/OrderService.kt @@ -90,15 +90,18 @@ class OrderService( } fun getAudioContentOrderList( + orderType: OrderType? = null, member: Member, offset: Long, limit: Long ): GetAudioContentOrderListResponse { val totalCount = repository.totalAudioContentOrderListCount( + orderType = orderType, memberId = member.id!!, dateTime = LocalDateTime.now() ) val orderItems = repository.getAudioContentOrderList( + orderType = orderType, dateTime = LocalDateTime.now(), coverImageHost = audioContentCoverImageHost, memberId = member.id!!, -- 2.40.1 From bf624821376b6079d42990c6ff78f9794805ef7c Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 6 Dec 2024 23:07:59 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20URL=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20API?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../content/AudioContentController.kt | 9 ++++++++ .../sodalive/content/AudioContentService.kt | 21 +++++++++++++++++++ .../sodalive/content/GenerateUrlResponse.kt | 5 +++++ 3 files changed, 35 insertions(+) create mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt 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 2a2a983..fafccf7 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentController.kt @@ -134,6 +134,15 @@ class AudioContentController(private val service: AudioContentService) { ApiResponse.ok(service.getDetail(id = id, member = member, timezone = timezone)) } + @GetMapping("/{id}/generate-url") + fun generateUrl( + @PathVariable id: Long, + @AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member? + ) = run { + if (member == null) throw SodaException("로그인 정보를 확인해주세요.") + ApiResponse.ok(service.generateUrl(contentId = id, member = member)) + } + @PostMapping("/playback-tracking") fun addAllPlaybackTracking( @RequestBody request: AddAllPlaybackTrackingRequest, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt index 05f9738..d5231df 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentService.kt @@ -827,4 +827,25 @@ class AudioContentService( pinContent.isActive = false } + + fun generateUrl(contentId: Long, member: Member): GenerateUrlResponse { + val audioContent = repository.findByIdOrNull(contentId) + ?: throw SodaException("잘못된 콘텐츠 입니다.\n다시 시도해 주세요.") + + val isExistsAudioContent = orderRepository.isExistOrdered( + memberId = member.id!!, + contentId = audioContent.id!! + ) + + val contentUrl = if (isExistsAudioContent) { + audioContentCloudFront.generateSignedURL( + resourcePath = audioContent.content!!, + expirationTime = 1000 * 60 * 60 * (audioContent.duration!!.split(":")[0].toLong() + 2) + ) + } else { + "" + } + + return GenerateUrlResponse(contentUrl) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt new file mode 100644 index 0000000..9a51cfe --- /dev/null +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/GenerateUrlResponse.kt @@ -0,0 +1,5 @@ +package kr.co.vividnext.sodalive.content + +data class GenerateUrlResponse( + val contentUrl: String +) -- 2.40.1 From 0583a8a56f68269d55a5e40b24f81337f06ef092 Mon Sep 17 00:00:00 2001 From: Klaus Date: Sun, 8 Dec 2024 15:44:42 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=EC=9E=AC=EC=83=9D=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=BD=98=ED=85=90=EC=B8=A0=20-=20=ED=81=AC=EB=A6=AC=EC=97=90?= =?UTF-8?q?=EC=9D=B4=ED=84=B0=20=ED=94=84=EB=A1=9C=ED=95=84=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/content/AudioContentRepository.kt | 3 ++- .../sodalive/content/playlist/AudioContentPlaylist.kt | 3 ++- 2 files changed, 4 insertions(+), 2 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 6898b77..09063db 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/AudioContentRepository.kt @@ -798,7 +798,8 @@ class AudioContentQueryRepositoryImpl( audioContentTheme.theme, audioContent.coverImage.prepend("/").prepend(imageHost), audioContent.duration, - member.nickname + member.nickname, + member.profileImage.prepend("/").prepend(imageHost) ) ) .from(audioContent) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt index 9343689..f737f5c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylist.kt @@ -30,5 +30,6 @@ data class AudioContentPlaylistContent @QueryProjection constructor( val category: String, val coverUrl: String, val duration: String, - val creatorNickname: String + val creatorNickname: String, + val creatorProfileUrl: String ) -- 2.40.1 From 330e4945e12082e9735e3cedb7aad3d035bbe02c Mon Sep 17 00:00:00 2001 From: Klaus Date: Mon, 9 Dec 2024 17:41:49 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EC=9E=AC=EC=83=9D=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EB=A6=AC=EC=8A=A4=ED=8A=B8=20=EC=A0=95=EB=A0=AC=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EB=B3=80=EA=B2=BD=20-=20=EB=AF=B8=EC=A0=95?= =?UTF-8?q?=EB=A0=AC=20->=20=EC=83=9D=EC=84=B1=EB=82=A0=EC=A7=9C=20?= =?UTF-8?q?=EB=82=B4=EB=A6=BC=EC=B0=A8=EC=88=9C=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/playlist/AudioContentPlaylistService.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt index e4594be..f51f523 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt @@ -92,7 +92,9 @@ class AudioContentPlaylistService( } fun getPlaylists(member: Member): GetPlaylistsResponse { - val playlists = redisRepository.findByMemberId(memberId = member.id!!) + val playlists = redisRepository + .findByMemberId(memberId = member.id!!) + .sortedByDescending { it.createdAt } return GetPlaylistsResponse( totalCount = playlists.size, -- 2.40.1 From a1f9b676b5a8a3d2d5b5107c01ff49980a8b4eeb Mon Sep 17 00:00:00 2001 From: Klaus Date: Tue, 10 Dec 2024 03:37:39 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=EC=9E=AC=EC=83=9D=EB=AA=A9=EB=A1=9D=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=EB=82=A0=EC=A7=9C=20=ED=8F=AC=EB=A7=B7=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD=20-=20yyyy-MM-dd=20->=20yyyy.MM.dd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sodalive/content/playlist/AudioContentPlaylistService.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt index f51f523..46ccf02 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/playlist/AudioContentPlaylistService.kt @@ -136,7 +136,7 @@ class AudioContentPlaylistService( throw SodaException("잘못된 요청입니다.") } - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd") val createdDate = playlist.createdAt .atZone(ZoneId.of("UTC")) .withZoneSameInstant(ZoneId.of("Asia/Seoul")) -- 2.40.1