From 22f89073e90b34505fa04b0cd701c6523f1d6d1b Mon Sep 17 00:00:00 2001 From: junhokim Date: Sat, 8 Nov 2025 17:34:21 +0900 Subject: [PATCH] =?UTF-8?q?Edited=20At=20=EC=9D=B4=ED=9B=84=20=EC=9D=BC?= =?UTF-8?q?=EC=9E=90=EB=A7=8C=20=EC=83=89=EC=9D=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../out/repository/LocationElasticRepository.kt | 2 +- .../out/repository/LocationQueryRepository.kt | 3 ++- .../retrip/map/infra/adapter/in/batch/MapReader.kt | 11 +++++++---- .../mysql/query/LocationQuerydslRepository.kt | 8 +++----- .../search/elasticsearch/entity/LocationDocument.kt | 9 ++++++++- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/src/main/kotlin/com/retrip/map/application/out/repository/LocationElasticRepository.kt b/src/main/kotlin/com/retrip/map/application/out/repository/LocationElasticRepository.kt index 43abbf3..1d2e2e3 100644 --- a/src/main/kotlin/com/retrip/map/application/out/repository/LocationElasticRepository.kt +++ b/src/main/kotlin/com/retrip/map/application/out/repository/LocationElasticRepository.kt @@ -7,5 +7,5 @@ import java.util.UUID @Repository interface LocationElasticRepository: ElasticsearchRepository { - + fun findFirstByOrderByEditedAtDesc(): LocationDocument? } diff --git a/src/main/kotlin/com/retrip/map/application/out/repository/LocationQueryRepository.kt b/src/main/kotlin/com/retrip/map/application/out/repository/LocationQueryRepository.kt index 652ed5c..55b5798 100644 --- a/src/main/kotlin/com/retrip/map/application/out/repository/LocationQueryRepository.kt +++ b/src/main/kotlin/com/retrip/map/application/out/repository/LocationQueryRepository.kt @@ -5,9 +5,10 @@ import com.retrip.map.domain.entity.Location import org.springframework.data.domain.Page import org.springframework.data.domain.Pageable import java.time.LocalDate +import java.time.LocalDateTime import java.util.UUID interface LocationQueryRepository { fun findLocations(id: UUID?, page: Pageable): Page - fun findLocationsByEditedAt( editedAt: LocalDate): List + fun findLocationsByEditedAt( editedAt: LocalDateTime): List } diff --git a/src/main/kotlin/com/retrip/map/infra/adapter/in/batch/MapReader.kt b/src/main/kotlin/com/retrip/map/infra/adapter/in/batch/MapReader.kt index adcdba6..1d1b55e 100644 --- a/src/main/kotlin/com/retrip/map/infra/adapter/in/batch/MapReader.kt +++ b/src/main/kotlin/com/retrip/map/infra/adapter/in/batch/MapReader.kt @@ -1,18 +1,21 @@ package com.retrip.map.infra.adapter.`in`.batch +import co.elastic.clients.elasticsearch.ElasticsearchClient +import com.retrip.map.application.out.repository.LocationElasticRepository import com.retrip.map.application.out.repository.LocationQueryRepository import com.retrip.map.domain.entity.Location import org.springframework.batch.item.ItemReader import org.springframework.stereotype.Component import java.time.LocalDate +import java.time.LocalDateTime @Component class MapReader( - val locationQueryRepository: LocationQueryRepository - + private val locationQueryRepository: LocationQueryRepository, + private val locationElasticRepository: LocationElasticRepository ): ItemReader> { override fun read(): List? { - println("TEST") - return locationQueryRepository.findLocationsByEditedAt(LocalDate.now()) + val lastUpdateDocument = locationElasticRepository.findFirstByOrderByEditedAtDesc() + return locationQueryRepository.findLocationsByEditedAt(lastUpdateDocument?.editedAt ?: LocalDateTime.now()) } } diff --git a/src/main/kotlin/com/retrip/map/infra/adapter/out/persistence/mysql/query/LocationQuerydslRepository.kt b/src/main/kotlin/com/retrip/map/infra/adapter/out/persistence/mysql/query/LocationQuerydslRepository.kt index 2836d76..fa2cb6b 100644 --- a/src/main/kotlin/com/retrip/map/infra/adapter/out/persistence/mysql/query/LocationQuerydslRepository.kt +++ b/src/main/kotlin/com/retrip/map/infra/adapter/out/persistence/mysql/query/LocationQuerydslRepository.kt @@ -12,6 +12,7 @@ import org.springframework.data.domain.PageImpl import org.springframework.data.domain.Pageable import org.springframework.stereotype.Repository import java.time.LocalDate +import java.time.LocalDateTime import java.util.* @@ -51,13 +52,10 @@ class LocationQuerydslRepository( return PageImpl(locations, page, count ?: 0) } - override fun findLocationsByEditedAt(editedAt: LocalDate): List { - val startOfDay = editedAt.atStartOfDay() - val endOfDay = editedAt.plusDays(1).atStartOfDay() + override fun findLocationsByEditedAt(editedAt: LocalDateTime): List { return query.selectFrom(location) .where( - location.editedAt.goe(startOfDay), - location.createdAt.lt(endOfDay) + location.editedAt.gt(editedAt) ).fetch() } diff --git a/src/main/kotlin/com/retrip/map/infra/adapter/out/search/elasticsearch/entity/LocationDocument.kt b/src/main/kotlin/com/retrip/map/infra/adapter/out/search/elasticsearch/entity/LocationDocument.kt index 04cd57b..c483667 100644 --- a/src/main/kotlin/com/retrip/map/infra/adapter/out/search/elasticsearch/entity/LocationDocument.kt +++ b/src/main/kotlin/com/retrip/map/infra/adapter/out/search/elasticsearch/entity/LocationDocument.kt @@ -7,6 +7,7 @@ import jakarta.persistence.Id import org.springframework.data.elasticsearch.annotations.Document import org.springframework.data.elasticsearch.annotations.Field import org.springframework.data.elasticsearch.annotations.FieldType +import java.time.LocalDateTime import java.util.* @Document(indexName = "locations") @@ -28,7 +29,11 @@ data class LocationDocument( @Field(type = FieldType.Double) val latitude: Double?, @Field(type = FieldType.Double) - val longitude: Double? + val longitude: Double?, + @Field(type = FieldType.Date) + val createdAt: LocalDateTime?, + @Field(type = FieldType.Date) + val editedAt: LocalDateTime?, ) { companion object { fun of(location: Location): LocationDocument { @@ -42,6 +47,8 @@ data class LocationDocument( location.address?.roadAddress, location.geoPoint?.latitude, location.geoPoint?.longitude, + location.createdAt, + location.editedAt ) } }