From dd138bff8675574cfde7a95a0c689069663c5453 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Mar 2025 01:43:43 +0900 Subject: [PATCH 1/5] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EB=B0=B0=EB=84=88=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20-=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20host=EB=A5=BC=20Q?= =?UTF-8?q?uerydsl=20=EC=BD=94=EB=93=9C=EC=97=90=EC=84=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20-=20=EC=8B=9C=EC=9E=91=20=EC=A0=84=EC=9D=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=EB=8F=84=20=EB=B3=B4=EC=9D=B4?= =?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 --- .../banner/AdminEventBannerRepository.kt | 21 ++++++++++++++----- .../event/banner/AdminEventBannerService.kt | 21 +------------------ .../event/banner/GetAdminEventResponse.kt | 10 ++++----- 3 files changed, 22 insertions(+), 30 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt index 547715b..8bd786b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt @@ -2,10 +2,13 @@ package kr.co.vividnext.sodalive.admin.event.banner import com.querydsl.core.types.dsl.DateTimePath import com.querydsl.core.types.dsl.Expressions +import com.querydsl.core.types.dsl.StringExpression +import com.querydsl.core.types.dsl.StringPath import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.event.Event import kr.co.vividnext.sodalive.event.QEvent.event +import org.springframework.beans.factory.annotation.Value import org.springframework.data.jpa.repository.JpaRepository import java.time.LocalDateTime @@ -16,22 +19,23 @@ interface AdminEventBannerQueryRepository { } class AdminEventBannerQueryRepositoryImpl( - private val queryFactory: JPAQueryFactory + private val queryFactory: JPAQueryFactory, + @Value("\${cloud.aws.cloud-front.host}") + private val cloudFrontHost: String ) : AdminEventBannerQueryRepository { override fun getEventList(): List { val now = LocalDateTime.now() val where = event.isActive.isTrue .and(event.startDate.loe(now)) - .and(event.endDate.goe(now)) return queryFactory .select( QGetAdminEventResponse( event.id, event.title, - event.thumbnailImage, - event.detailImage, - event.popupImage, + getProcessedUrlExpression(event.thumbnailImage), + getProcessedUrlExpression(event.detailImage), + getProcessedUrlExpression(event.popupImage), getFormattedDate(event.startDate), getFormattedDate(event.endDate), event.link, @@ -58,4 +62,11 @@ class AdminEventBannerQueryRepositoryImpl( "%Y-%m-%d" ) } + + private fun getProcessedUrlExpression(path: StringPath): StringExpression { + return Expressions.stringTemplate( + "CASE WHEN {0} LIKE '$cloudFrontHost%' THEN {0} ELSE CONCAT('$cloudFrontHost', {0}) END", + path + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt index 158dc5e..c3b0910 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt @@ -20,9 +20,7 @@ class AdminEventBannerService( private val s3Uploader: S3Uploader, @Value("\${cloud.aws.s3.bucket}") - private val bucket: String, - @Value("\${cloud.aws.cloud-front.host}") - private val cloudFrontHost: String + private val bucket: String ) { @Transactional fun save( @@ -201,22 +199,5 @@ class AdminEventBannerService( fun getEventList(): List { return repository.getEventList() - .asSequence() - .map { - if (!it.thumbnailImageUrl.startsWith("https://")) { - it.thumbnailImageUrl = "$cloudFrontHost/${it.thumbnailImageUrl}" - } - - if (it.detailImageUrl != null && !it.detailImageUrl!!.startsWith("https://")) { - it.detailImageUrl = "$cloudFrontHost/${it.detailImageUrl}" - } - - if (it.popupImageUrl != null && !it.popupImageUrl!!.startsWith("https://")) { - it.popupImageUrl = "$cloudFrontHost/${it.popupImageUrl}" - } - - it - } - .toList() } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/GetAdminEventResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/GetAdminEventResponse.kt index 82e9e26..23b10b6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/GetAdminEventResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/GetAdminEventResponse.kt @@ -5,11 +5,11 @@ import com.querydsl.core.annotations.QueryProjection data class GetAdminEventResponse @QueryProjection constructor( val id: Long, val title: String? = null, - var thumbnailImageUrl: String, - var detailImageUrl: String? = null, - var popupImageUrl: String? = null, - var startDate: String, - var endDate: String, + val thumbnailImageUrl: String, + val detailImageUrl: String? = null, + val popupImageUrl: String? = null, + val startDate: String, + val endDate: String, val link: String? = null, val isAdult: Boolean? = null, val isPopup: Boolean From 7cd95da83cfd62d0491bd968d3a93037cc735102 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Mar 2025 01:48:03 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EA=B4=91?= =?UTF-8?q?=EA=B3=A0=20=ED=86=B5=EA=B3=84=20-=20=ED=8C=A8=ED=82=A4?= =?UTF-8?q?=EC=A7=80=20=EC=9D=B4=EB=8F=99=20(marketing/statistics=20->=20s?= =?UTF-8?q?tatistics/ad)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../statistics => statistics/ad}/AdminAdStatisticsController.kt | 2 +- .../statistics => statistics/ad}/AdminAdStatisticsRepository.kt | 2 +- .../statistics => statistics/ad}/AdminAdStatisticsService.kt | 2 +- .../ad}/GetAdminAdStatisticsResponse.kt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/{marketing/statistics => statistics/ad}/AdminAdStatisticsController.kt (94%) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/{marketing/statistics => statistics/ad}/AdminAdStatisticsRepository.kt (98%) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/{marketing/statistics => statistics/ad}/AdminAdStatisticsService.kt (93%) rename src/main/kotlin/kr/co/vividnext/sodalive/admin/{marketing/statistics => statistics/ad}/GetAdminAdStatisticsResponse.kt (90%) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsController.kt similarity index 94% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsController.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsController.kt index 6249319..6316d8e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsController.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.admin.marketing.statistics +package kr.co.vividnext.sodalive.admin.statistics.ad import kr.co.vividnext.sodalive.common.ApiResponse import org.springframework.data.domain.Pageable diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsRepository.kt similarity index 98% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsRepository.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsRepository.kt index c1b4b1b..143777b 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsRepository.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.admin.marketing.statistics +package kr.co.vividnext.sodalive.admin.statistics.ad import com.querydsl.core.types.dsl.CaseBuilder import com.querydsl.core.types.dsl.DateTimePath diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsService.kt similarity index 93% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsService.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsService.kt index 262272d..511a5a4 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/AdminAdStatisticsService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/AdminAdStatisticsService.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.admin.marketing.statistics +package kr.co.vividnext.sodalive.admin.statistics.ad import kr.co.vividnext.sodalive.extensions.convertLocalDateTime import org.springframework.stereotype.Service diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/GetAdminAdStatisticsResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/GetAdminAdStatisticsResponse.kt similarity index 90% rename from src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/GetAdminAdStatisticsResponse.kt rename to src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/GetAdminAdStatisticsResponse.kt index 2e125d2..48d8339 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/marketing/statistics/GetAdminAdStatisticsResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/statistics/ad/GetAdminAdStatisticsResponse.kt @@ -1,4 +1,4 @@ -package kr.co.vividnext.sodalive.admin.marketing.statistics +package kr.co.vividnext.sodalive.admin.statistics.ad import com.querydsl.core.annotations.QueryProjection From 3ef1a732e5641598c240cbb1221c2642cf67ea01 Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Mar 2025 01:55:08 +0900 Subject: [PATCH 3/5] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EB=B0=B0=EB=84=88=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20-=20=EC=8B=9C=EC=9E=91=20=EC=A0=84=EC=9D=B8=20?= =?UTF-8?q?=EC=9D=B4=EB=B2=A4=ED=8A=B8=EB=8F=84=20=EB=B3=B4=EC=9D=B4?= =?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/admin/event/banner/AdminEventBannerRepository.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt index 8bd786b..1c62345 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt @@ -26,7 +26,7 @@ class AdminEventBannerQueryRepositoryImpl( override fun getEventList(): List { val now = LocalDateTime.now() val where = event.isActive.isTrue - .and(event.startDate.loe(now)) + .and(event.endDate.goe(now)) return queryFactory .select( @@ -65,7 +65,7 @@ class AdminEventBannerQueryRepositoryImpl( private fun getProcessedUrlExpression(path: StringPath): StringExpression { return Expressions.stringTemplate( - "CASE WHEN {0} LIKE '$cloudFrontHost%' THEN {0} ELSE CONCAT('$cloudFrontHost', {0}) END", + "CASE WHEN {0} LIKE '$cloudFrontHost%' THEN {0} ELSE CONCAT('$cloudFrontHost/', {0}) END", path ) } From 287d1330801f5cc84b81dbfa8bcb0ea31f4a050f Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Mar 2025 02:13:42 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EB=B0=B0=EB=84=88=20-=20=EC=9D=B4?= =?UTF-8?q?=EB=B2=A4=ED=8A=B8=20=EA=B8=B0=EA=B0=84=20=EC=84=A4=EC=A0=95?= =?UTF-8?q?=EC=9D=84=20=EC=8B=9C=EA=B0=84:=EB=B6=84=20=EA=B9=8C=EC=A7=80?= =?UTF-8?q?=20=EC=84=A4=EC=A0=95=ED=95=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 --- .../event/banner/AdminEventBannerRepository.kt | 2 +- .../admin/event/banner/AdminEventBannerService.kt | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt index 1c62345..bdc750d 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerRepository.kt @@ -59,7 +59,7 @@ class AdminEventBannerQueryRepositoryImpl( "UTC", "Asia/Seoul" ), - "%Y-%m-%d" + "%Y-%m-%d %H:%i" ) } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt index c3b0910..224c9e8 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/banner/AdminEventBannerService.kt @@ -10,7 +10,7 @@ import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import org.springframework.web.multipart.MultipartFile -import java.time.LocalDate +import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter @@ -36,13 +36,13 @@ class AdminEventBannerService( ): Long { if (detail == null && link.isNullOrBlank()) throw SodaException("상세이미지 혹은 링크를 등록하세요") - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - val startDate = LocalDate.parse(startDateString, dateTimeFormatter).atTime(0, 0) + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") + val startDate = LocalDateTime.parse(startDateString, dateTimeFormatter) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() - val endDate = LocalDate.parse(endDateString, dateTimeFormatter).atTime(23, 59, 59) + val endDate = LocalDateTime.parse(endDateString, dateTimeFormatter).withSecond(59) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() @@ -172,16 +172,16 @@ class AdminEventBannerService( event.isAdult = isAdult } - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") if (startDateString != null) { - event.startDate = LocalDate.parse(startDateString, dateTimeFormatter).atTime(0, 0) + event.startDate = LocalDateTime.parse(startDateString, dateTimeFormatter) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() } if (endDateString != null) { - event.endDate = LocalDate.parse(endDateString, dateTimeFormatter).atTime(23, 59, 59) + event.endDate = LocalDateTime.parse(endDateString, dateTimeFormatter).withSecond(59) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() From b9063fb22f9457146b30117e4c814f60b1df6cce Mon Sep 17 00:00:00 2001 From: Klaus Date: Fri, 14 Mar 2025 02:44:34 +0900 Subject: [PATCH 5/5] =?UTF-8?q?=EA=B4=80=EB=A6=AC=EC=9E=90=20-=20=EC=B6=A9?= =?UTF-8?q?=EC=A0=84=EC=9D=B4=EB=B2=A4=ED=8A=B8=20-=20=EC=8B=9C=EA=B0=84?= =?UTF-8?q?=20=EA=B3=84=EC=82=B0=EC=9D=84=20Querydsl=20=EC=BD=94=EB=93=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=88=98=ED=96=89=20-=20=EB=93=B1?= =?UTF-8?q?=EB=A1=9D/=EC=88=98=EC=A0=95=20=EC=8B=9C=20=EC=9D=B4=EB=B2=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A7=84=ED=96=89=EA=B8=B0=EA=B0=84=EC=97=90=20?= =?UTF-8?q?=EC=8B=9C=EA=B0=84=EB=8F=84=20=ED=8F=AC=ED=95=A8=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 --- .../charge/AdminChargeEventRepository.kt | 35 ++++++++++++++++-- .../event/charge/AdminChargeEventService.kt | 36 ++++--------------- .../charge/GetChargeEventListResponse.kt | 4 ++- 3 files changed, 42 insertions(+), 33 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventRepository.kt index d8dfa4e..a78f36c 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventRepository.kt @@ -1,22 +1,51 @@ package kr.co.vividnext.sodalive.admin.event.charge +import com.querydsl.core.types.dsl.DateTimePath +import com.querydsl.core.types.dsl.Expressions +import com.querydsl.core.types.dsl.StringTemplate import com.querydsl.jpa.impl.JPAQueryFactory import kr.co.vividnext.sodalive.admin.event.charge.QChargeEvent.chargeEvent import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository +import java.time.LocalDateTime @Repository interface AdminChargeEventRepository : JpaRepository, AdminChargeEventQueryRepository interface AdminChargeEventQueryRepository { - fun getChargeEventList(): List + fun getChargeEventList(): List } class AdminChargeEventQueryRepositoryImpl(private val queryFactory: JPAQueryFactory) : AdminChargeEventQueryRepository { - override fun getChargeEventList(): List { + override fun getChargeEventList(): List { return queryFactory - .selectFrom(chargeEvent) + .select( + QGetChargeEventListResponse( + chargeEvent.id, + chargeEvent.title, + getFormattedDate(chargeEvent.startDate), + getFormattedDate(chargeEvent.endDate), + chargeEvent.availableCount, + chargeEvent.addPercent.multiply(100).castToNum(Int::class.java), + chargeEvent.isActive + ) + ) + .from(chargeEvent) .orderBy(chargeEvent.createdAt.desc()) .fetch() } + + private fun getFormattedDate(dateTimePath: DateTimePath): StringTemplate { + return Expressions.stringTemplate( + "DATE_FORMAT({0}, {1})", + Expressions.dateTimeTemplate( + LocalDateTime::class.java, + "CONVERT_TZ({0},{1},{2})", + dateTimePath, + "UTC", + "Asia/Seoul" + ), + "%Y-%m-%d %H:%i" + ) + } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventService.kt index 27aad89..c36d54e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/AdminChargeEventService.kt @@ -4,7 +4,7 @@ import kr.co.vividnext.sodalive.common.SodaException import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional -import java.time.LocalDate +import java.time.LocalDateTime import java.time.ZoneId import java.time.format.DateTimeFormatter @@ -13,13 +13,13 @@ import java.time.format.DateTimeFormatter class AdminChargeEventService(private val repository: AdminChargeEventRepository) { @Transactional fun createChargeEvent(request: CreateChargeEventRequest): Long { - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - val startDate = LocalDate.parse(request.startDateString, dateTimeFormatter).atTime(0, 0) + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") + val startDate = LocalDateTime.parse(request.startDateString, dateTimeFormatter) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() - val endDate = LocalDate.parse(request.endDateString, dateTimeFormatter).atTime(23, 59, 59) + val endDate = LocalDateTime.parse(request.endDateString, dateTimeFormatter).withSecond(59) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() @@ -44,16 +44,16 @@ class AdminChargeEventService(private val repository: AdminChargeEventRepository chargeEvent.title = request.title } - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") + val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm") if (request.startDateString != null) { - chargeEvent.startDate = LocalDate.parse(request.startDateString, dateTimeFormatter).atTime(0, 0) + chargeEvent.startDate = LocalDateTime.parse(request.startDateString, dateTimeFormatter) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() } if (request.endDateString != null) { - chargeEvent.endDate = LocalDate.parse(request.endDateString, dateTimeFormatter).atTime(23, 59, 59) + chargeEvent.endDate = LocalDateTime.parse(request.endDateString, dateTimeFormatter).withSecond(59) .atZone(ZoneId.of("Asia/Seoul")) .withZoneSameInstant(ZoneId.of("UTC")) .toLocalDateTime() @@ -74,27 +74,5 @@ class AdminChargeEventService(private val repository: AdminChargeEventRepository fun getChargeEventList(): List { return repository.getChargeEventList() - .map { - val dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd") - val startDate = it.startDate - .atZone(ZoneId.of("UTC")) - .withZoneSameInstant(ZoneId.of("Asia/Seoul")) - .format(dateTimeFormatter) - - val endDate = it.endDate - .atZone(ZoneId.of("UTC")) - .withZoneSameInstant(ZoneId.of("Asia/Seoul")) - .format(dateTimeFormatter) - - GetChargeEventListResponse( - id = it.id!!, - title = it.title, - startDate = startDate, - endDate = endDate, - availableCount = it.availableCount, - addPercent = (it.addPercent * 100).toInt(), - isActive = it.isActive - ) - } } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/GetChargeEventListResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/GetChargeEventListResponse.kt index ee6ae16..a751445 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/GetChargeEventListResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/admin/event/charge/GetChargeEventListResponse.kt @@ -1,6 +1,8 @@ package kr.co.vividnext.sodalive.admin.event.charge -data class GetChargeEventListResponse( +import com.querydsl.core.annotations.QueryProjection + +data class GetChargeEventListResponse @QueryProjection constructor( val id: Long, val title: String, val startDate: String,