🚧 common-util 모듈 추가
This commit is contained in:
@@ -2,4 +2,5 @@ dependencies {
|
||||
implementation("org.springframework.data:spring-data-commons")
|
||||
implementation("org.springframework:spring-tx")
|
||||
|
||||
implementation(project(":util:common-util"))
|
||||
}
|
||||
@@ -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(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -3,5 +3,7 @@ apply(plugin = "kotlin-jpa")
|
||||
dependencies {
|
||||
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
|
||||
runtimeOnly("org.mariadb.jdbc:mariadb-java-client")
|
||||
|
||||
implementation(project(":util:common-util"))
|
||||
implementation(project(":core:demo-core"))
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
package me.jiniworld.demohx.persistence.notice
|
||||
|
||||
import me.jiniworld.demohx.application.notice.port.output.LoadNoticePort
|
||||
import me.jiniworld.demohx.annotation.PersistenceAdapter
|
||||
import me.jiniworld.demohx.application.notice.domain.Notice
|
||||
import me.jiniworld.demohx.application.notice.port.output.LoadNoticePort
|
||||
import me.jiniworld.demohx.persistence.notice.repository.NoticeRepository
|
||||
import org.springframework.data.domain.Pageable
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Component
|
||||
@PersistenceAdapter
|
||||
internal class NoticePersistenceAdapter(
|
||||
private val noticeRepository: NoticeRepository,
|
||||
) : LoadNoticePort {
|
||||
|
||||
@@ -4,6 +4,7 @@ dependencies {
|
||||
compileOnly("org.springframework.boot:spring-boot-configuration-processor")
|
||||
implementation("org.springdoc:springdoc-openapi-ui:1.6.13")
|
||||
|
||||
implementation(project(":util:common-util"))
|
||||
implementation(project(":core:demo-core"))
|
||||
implementation(project(":infrastructure:datastore-mariadb"))
|
||||
}
|
||||
@@ -2,13 +2,12 @@ package me.jiniworld.demohx.web.notice
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation
|
||||
import io.swagger.v3.oas.annotations.tags.Tag
|
||||
import me.jiniworld.demohx.annotation.WebAdapter
|
||||
import me.jiniworld.demohx.application.notice.port.input.GetNoticeQuery
|
||||
import me.jiniworld.demohx.application.notice.port.input.GetNoticesCommand
|
||||
import org.springframework.stereotype.Component
|
||||
import org.springframework.web.bind.annotation.*
|
||||
|
||||
@Component
|
||||
//@WebAdapter
|
||||
@WebAdapter
|
||||
@Tag(name = "setting-system", description = "설정-시스템(공지사항, FAQ, 이용약관, 메타정보 등)")
|
||||
@RestController
|
||||
@RequestMapping("/v1/notices")
|
||||
|
||||
@@ -7,3 +7,5 @@ findProject(":infrastructure:datastore-mariadb")?.name = "datastore-mariadb"
|
||||
include("server")
|
||||
include("server:demo-app")
|
||||
findProject(":server:demo-app")?.name = "demo-app"
|
||||
include("util:common-util")
|
||||
findProject(":util:common-util")?.name = "common-util"
|
||||
|
||||
2
util/common-util/build.gradle.kts
Normal file
2
util/common-util/build.gradle.kts
Normal file
@@ -0,0 +1,2 @@
|
||||
dependencies {
|
||||
}
|
||||
@@ -1,14 +1,12 @@
|
||||
package me.jiniworld.demohx.application.util
|
||||
package me.jiniworld.demohx
|
||||
|
||||
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"
|
||||
@@ -36,27 +34,9 @@ object DateTimeUtils {
|
||||
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 toString(date: LocalDate): String = date.format(FORMATTER_DATE)
|
||||
|
||||
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(dateTime: LocalDateTime): String = dateTime.format(FORMATTER_DATETIME)
|
||||
|
||||
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
|
||||
fun toDateString(dateTime: LocalDateTime) : String = dateTime.format(FORMATTER_DATE)
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package me.jiniworld.demohx.annotation
|
||||
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
@MustBeDocumented
|
||||
@Component
|
||||
annotation class PersistenceAdapter(
|
||||
val value: String = ""
|
||||
)
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
package me.jiniworld.demohx.annotation
|
||||
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
@MustBeDocumented
|
||||
@Component
|
||||
annotation class UseCase(
|
||||
val value: String = ""
|
||||
)
|
||||
|
||||
|
||||
@@ -0,0 +1,12 @@
|
||||
package me.jiniworld.demohx.annotation
|
||||
|
||||
import org.springframework.stereotype.Component
|
||||
|
||||
@Target(AnnotationTarget.CLASS)
|
||||
@Retention(AnnotationRetention.RUNTIME)
|
||||
@MustBeDocumented
|
||||
@Component
|
||||
annotation class WebAdapter(
|
||||
val value: String = ""
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user