🚧 common-util 모듈 추가

This commit is contained in:
jini
2022-11-30 04:31:38 +09:00
parent 23cff9d75f
commit 31b6c85b77
13 changed files with 57 additions and 33 deletions

View File

@@ -2,4 +2,5 @@ dependencies {
implementation("org.springframework.data:spring-data-commons")
implementation("org.springframework:spring-tx")
implementation(project(":util:common-util"))
}

View File

@@ -1,8 +1,8 @@
package me.jiniworld.demohx.application.notice.domain
import me.jiniworld.demohx.DateTimeUtils
import me.jiniworld.demohx.application.notice.port.output.NoticeDetail
import me.jiniworld.demohx.application.notice.port.output.NoticeSimple
import me.jiniworld.demohx.application.util.DateTimeUtils
import java.time.LocalDateTime
data class Notice(

View File

@@ -1,16 +1,16 @@
package me.jiniworld.demohx.application.notice.service
import me.jiniworld.demohx.annotation.UseCase
import me.jiniworld.demohx.application.notice.port.input.GetNoticeQuery
import me.jiniworld.demohx.application.notice.port.input.GetNoticesCommand
import me.jiniworld.demohx.application.notice.port.output.LoadNoticePort
import me.jiniworld.demohx.application.notice.port.output.NoticeDetail
import org.springframework.data.domain.PageRequest
import org.springframework.data.domain.Sort
import org.springframework.stereotype.Component
import org.springframework.transaction.annotation.Transactional
@Transactional(readOnly = true)
@Component
@UseCase
internal class GetNoticeService(
private val loadNoticePort: LoadNoticePort,
) : GetNoticeQuery {

View File

@@ -1,62 +0,0 @@
package me.jiniworld.demohx.application.util
import java.time.LocalDate
import java.time.LocalDateTime
import java.time.LocalTime
import java.time.format.DateTimeFormatter
import java.time.temporal.ChronoField
import java.time.temporal.TemporalAdjusters
object DateTimeUtils {
private const val SIMPLE_PATTERN_MONTH = "yyyyMM"
private const val SIMPLE_PATTERN_DATE = "yyyyMMdd"
private const val DEFAULT_PATTERN_DATE = "yyyy-MM-dd"
private const val DEFAULT_PATTERN_DATETIME = "yyyy-MM-dd HH:mm:ss"
private const val DEFAULT_PATTERN_TIME = "HH:mm:ss"
private val LOCALTIME_START = LocalTime.of(0, 0)
private val LOCALTIME_END = LocalTime.of(23, 59, 59)
val FORMATTER_MONTH_SIMPLE: DateTimeFormatter = DateTimeFormatter.ofPattern(SIMPLE_PATTERN_MONTH)
val FORMATTER_DATE_SIMPLE: DateTimeFormatter = DateTimeFormatter.ofPattern(SIMPLE_PATTERN_DATE)
val FORMATTER_DATE: DateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN_DATE)
val FORMATTER_DATETIME: DateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN_DATETIME)
val FORMATTER_TIME: DateTimeFormatter = DateTimeFormatter.ofPattern(DEFAULT_PATTERN_TIME)
fun getFirstDate(month: String): LocalDate =
LocalDate.of(Integer.parseInt(month.substring(0, 4)), Integer.parseInt(month.substring(4, 6)), 1)
fun getLastDate(month: String): LocalDate =
getFirstDate(month).with(TemporalAdjusters.lastDayOfMonth())
fun getFirstDateTime(date: LocalDate): LocalDateTime =
LocalDateTime.of(date, LOCALTIME_START)
fun getLastDateTime(date: LocalDate): LocalDateTime =
LocalDateTime.of(date.with(TemporalAdjusters.lastDayOfMonth()), LOCALTIME_END)
fun getFirstDateTime(date: LocalDate, type: AnalysisType): LocalDateTime =
when (type) {
AnalysisType.weekly -> LocalDateTime.of(date.minusDays((date[ChronoField.DAY_OF_WEEK] - 1).toLong()).minusWeeks(6), LOCALTIME_START)
AnalysisType.monthly -> date.minusDays((date[ChronoField.DAY_OF_MONTH] - 1).toLong()).minusMonths(6).atStartOfDay()
else -> LocalDateTime.of(date.minusDays((date[ChronoField.DAY_OF_WEEK] - 1).toLong()), LOCALTIME_START)
}
fun getLastDateTime(date: LocalDate, type: AnalysisType): LocalDateTime =
when (type) {
AnalysisType.monthly -> LocalDateTime.of(date.minusDays(date[ChronoField.DAY_OF_MONTH].toLong()).plusMonths(1), LOCALTIME_END)
else -> LocalDateTime.of(date.plusDays((7 - date[ChronoField.DAY_OF_WEEK]).toLong()), LOCALTIME_END)
}
fun toString(date: LocalDate) = date.format(FORMATTER_DATE)
fun toString(dateTime: LocalDateTime) = dateTime.format(FORMATTER_DATETIME)
fun toDateString(dateTime: LocalDateTime) = dateTime.format(FORMATTER_DATE)
}
enum class AnalysisType {
daily, weekly, monthly
}