diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/GetContentMainTabHomeResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/GetContentMainTabHomeResponse.kt index c104a77..db9b01f 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/GetContentMainTabHomeResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/content/main/tab/home/GetContentMainTabHomeResponse.kt @@ -6,11 +6,11 @@ import kr.co.vividnext.sodalive.content.main.banner.GetAudioContentBannerRespons import kr.co.vividnext.sodalive.content.series.GetSeriesListResponse import kr.co.vividnext.sodalive.event.GetEventResponse import kr.co.vividnext.sodalive.explorer.GetExplorerSectionResponse -import kr.co.vividnext.sodalive.notice.NoticeTitleItem +import kr.co.vividnext.sodalive.notice.NoticeItem data class GetContentMainTabHomeResponse( val tabId: Long = 1, - val latestNotice: NoticeTitleItem?, + val latestNotice: NoticeItem?, val bannerList: List, val rankCreatorList: GetExplorerSectionResponse, val rankSeriesList: List, diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/notice/GetNoticeResponse.kt b/src/main/kotlin/kr/co/vividnext/sodalive/notice/GetNoticeResponse.kt index 246846e..89003d6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/notice/GetNoticeResponse.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/notice/GetNoticeResponse.kt @@ -7,14 +7,9 @@ data class GetNoticeResponse( val noticeList: List ) -data class NoticeItem( +data class NoticeItem @QueryProjection constructor( val id: Long, val title: String, val content: String, val date: String ) - -data class NoticeTitleItem @QueryProjection constructor( - val id: Long, - val title: String -) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeService.kt index f76e57f..8aa890e 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceNoticeService.kt @@ -5,8 +5,6 @@ import org.springframework.data.domain.Pageable import org.springframework.data.repository.findByIdOrNull import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional -import java.time.ZoneId -import java.time.format.DateTimeFormatter @Service @Transactional(readOnly = true) @@ -46,25 +44,11 @@ class ServiceNoticeService(private val repository: ServiceServiceNoticeRepositor fun getNoticeList(pageable: Pageable, timezone: String): GetNoticeResponse { val totalCount = repository.getNoticeTotalCount() val noticeList = repository.getNoticeList(pageable) - .asSequence() - .map { - val createdAt = it.createdAt!! - .atZone(ZoneId.of("UTC")) - .withZoneSameInstant(ZoneId.of(timezone)) - - NoticeItem( - it.id!!, - it.title, - it.content, - createdAt.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")) - ) - } - .toList() return GetNoticeResponse(totalCount, noticeList) } - fun getLatestNotice(): NoticeTitleItem? { + fun getLatestNotice(): NoticeItem? { return repository.getLatestNotice() } } diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceServiceNoticeRepository.kt b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceServiceNoticeRepository.kt index d5772f5..f1261e4 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceServiceNoticeRepository.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/notice/ServiceServiceNoticeRepository.kt @@ -1,18 +1,22 @@ package kr.co.vividnext.sodalive.notice +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.notice.QServiceNotice.serviceNotice import org.springframework.data.domain.Pageable import org.springframework.data.jpa.repository.JpaRepository import org.springframework.stereotype.Repository +import java.time.LocalDateTime @Repository interface ServiceServiceNoticeRepository : JpaRepository, ServiceNoticeQueryRepository interface ServiceNoticeQueryRepository { fun getNoticeTotalCount(): Int - fun getNoticeList(pageable: Pageable): List - fun getLatestNotice(): NoticeTitleItem? + fun getNoticeList(pageable: Pageable): List + fun getLatestNotice(): NoticeItem? } @Repository @@ -26,9 +30,17 @@ class ServiceNoticeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory .size } - override fun getNoticeList(pageable: Pageable): List { + override fun getNoticeList(pageable: Pageable): List { return queryFactory - .selectFrom(serviceNotice) + .select( + QNoticeItem( + serviceNotice.id, + serviceNotice.title, + serviceNotice.content, + getFormattedDate(serviceNotice.createdAt) + ) + ) + .from(serviceNotice) .where(serviceNotice.isActive.isTrue) .offset(pageable.offset) .limit(pageable.pageSize.toLong()) @@ -36,12 +48,14 @@ class ServiceNoticeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory .fetch() } - override fun getLatestNotice(): NoticeTitleItem? { + override fun getLatestNotice(): NoticeItem? { return queryFactory .select( - QNoticeTitleItem( + QNoticeItem( serviceNotice.id, - serviceNotice.title + serviceNotice.title, + serviceNotice.content, + getFormattedDate(serviceNotice.createdAt) ) ) .from(serviceNotice) @@ -49,4 +63,18 @@ class ServiceNoticeQueryRepositoryImpl(private val queryFactory: JPAQueryFactory .orderBy(serviceNotice.id.desc()) .fetchFirst() } + + 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" + ) + } }