From 35e1409dced7387d65079638762e6481ae9acb11 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 19:48:37 +0900 Subject: [PATCH 01/15] feat: use value class of originMapId --- .../application/domain/place/OriginPlace.kt | 5 +++- .../domain/place/OriginPlaceService.kt | 4 +-- .../web/OriginPlaceAutoCompleteClient.kt | 5 ++-- .../persistence/entity/OriginPlaceEntity.kt | 3 ++- .../adapter/AvocadoPlaceAutoCompleteClient.kt | 9 ++++--- .../adapter/AvocadoPlaceInfoResponse.kt | 3 ++- .../avocado/parser/AvocadoPlaceIdParser.kt | 26 ++++++++++++++----- .../AvocadoPlaceAutoCompleteClientTest.kt | 9 ++++--- .../adapter/LemonPlaceAutoCompleteClient.kt | 9 ++++--- .../lemon/adapter/LemonPlaceInfoResponse.kt | 3 ++- .../web/lemon/parser/LemonPlaceIdParser.kt | 9 +++++-- .../lemon/LemonPlaceAutoCompleteClientTest.kt | 5 ++-- 12 files changed, 60 insertions(+), 30 deletions(-) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt index 08d11ffa..28280e71 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt @@ -6,7 +6,7 @@ import com.piikii.application.domain.generic.ThumbnailLinks data class OriginPlace( val id: Long?, val name: String, - val originMapId: Long, + val originMapId: OriginMapId, val url: String, val thumbnailLinks: ThumbnailLinks, val address: String? = null, @@ -18,3 +18,6 @@ data class OriginPlace( val category: String?, val origin: Origin, ) + +@JvmInline +value class OriginMapId(val value: Long) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt index a7533afd..c91fcb9c 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt @@ -22,8 +22,8 @@ class OriginPlaceService( ExceptionCode.NOT_SUPPORT_AUTO_COMPLETE_URL, "No AutoComplete client found for $url", ) - val placeId = originPlaceAutoCompleteClient.extractPlaceId(plainUrl) - return originPlaceAutoCompleteClient.getAutoCompletedPlace(url = plainUrl, placeId = placeId) + val originMapId = originPlaceAutoCompleteClient.extractOriginMapId(plainUrl) + return originPlaceAutoCompleteClient.getAutoCompletedPlace(url = plainUrl, originMapId = originMapId) } private fun getUrlOfRemovedParameters(url: String): String { diff --git a/piikii-application/src/main/kotlin/com/piikii/application/port/output/web/OriginPlaceAutoCompleteClient.kt b/piikii-application/src/main/kotlin/com/piikii/application/port/output/web/OriginPlaceAutoCompleteClient.kt index e75ed824..d90c44c4 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/port/output/web/OriginPlaceAutoCompleteClient.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/port/output/web/OriginPlaceAutoCompleteClient.kt @@ -1,14 +1,15 @@ package com.piikii.application.port.output.web +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace interface OriginPlaceAutoCompleteClient { fun isAutoCompleteSupportedUrl(url: String): Boolean - fun extractPlaceId(url: String): String + fun extractOriginMapId(url: String): OriginMapId fun getAutoCompletedPlace( url: String, - placeId: String, + originMapId: OriginMapId, ): OriginPlace } diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt index 30504073..3cb1de80 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt @@ -2,6 +2,7 @@ package com.piikii.output.persistence.postgresql.persistence.entity import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.generic.ThumbnailLinks +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace import com.piikii.output.persistence.postgresql.persistence.common.BaseEntity import jakarta.persistence.Column @@ -20,7 +21,7 @@ import org.hibernate.annotations.SQLRestriction @DynamicUpdate class OriginPlaceEntity( @Column(name = "origin_map_id", nullable = false) - val originMapId: Long, + val originMapId: OriginMapId, @Column(name = "name", length = 255, nullable = false) var name: String, @Column(name = "url", nullable = false, length = 255) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt index 78a67690..ba61c753 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.avocado.adapter +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace import com.piikii.application.port.output.web.OriginPlaceAutoCompleteClient import com.piikii.common.exception.ExceptionCode @@ -18,17 +19,17 @@ class AvocadoPlaceAutoCompleteClient( return avocadoPlaceIdParserStrategy.getParserBySupportedUrl(url) != null } - override fun extractPlaceId(url: String): String { - return avocadoPlaceIdParserStrategy.getParserBySupportedUrl(url)?.parsePlaceId(url) + override fun extractOriginMapId(url: String): OriginMapId { + return avocadoPlaceIdParserStrategy.getParserBySupportedUrl(url)?.parseOriginMapId(url) ?: throw PiikiiException(ExceptionCode.NOT_SUPPORT_AUTO_COMPLETE_URL) } override fun getAutoCompletedPlace( url: String, - placeId: String, + originMapId: OriginMapId, ): OriginPlace { return avocadoApiClient.get() - .uri("/$placeId") + .uri("/${originMapId.value}") .retrieve() .body() ?.toOriginPlace(url) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt index f048f85b..1aafca7b 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.annotation.JsonProperty import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.generic.ThumbnailLinks +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace @JsonIgnoreProperties(ignoreUnknown = true) @@ -27,7 +28,7 @@ data class AvocadoPlaceInfoResponse( fun toOriginPlace(url: String): OriginPlace { return OriginPlace( id = null, - originMapId = id, + originMapId = OriginMapId(id), name = name, url = url, thumbnailLinks = ThumbnailLinks(images ?: emptyList()), diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt index 59b4b791..aa8d7fe3 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.avocado.parser +import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.config.AvocadoProperties import org.springframework.stereotype.Component import org.springframework.web.client.RestClient @@ -14,7 +15,20 @@ class AvocadoPlaceIdParserStrategy(private val parsers: List() ?.toOriginPlace(url) diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt index 17bac969..9ec2e146 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt @@ -4,6 +4,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties import com.fasterxml.jackson.annotation.JsonProperty import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.generic.ThumbnailLinks +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace @JsonIgnoreProperties(ignoreUnknown = true) @@ -20,7 +21,7 @@ data class LemonPlaceInfoResponse( return OriginPlace( id = null, name = basicInfo.name, - originMapId = basicInfo.cid, + originMapId = OriginMapId(basicInfo.cid), url = url, thumbnailLinks = ThumbnailLinks(basicInfo.mainPhotoUrl), address = fullAddress, diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt index c7b29160..e5ab167e 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.lemon.parser +import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.lemon.config.LemonProperties import org.springframework.stereotype.Component @@ -14,11 +15,15 @@ class LemonPlaceIdParser( return patternRegex.matches(url) } - fun parse(url: String): String? { + fun parseOriginMapId(url: String): OriginMapId? { if (!isAutoCompleteSupportedUrl(url)) { return null } - return parseRegex.find(url)?.groupValues?.get(1) + return parseRegex.find(url) + ?.groupValues + ?.getOrNull(1) + ?.toLongOrNull() + ?.let { OriginMapId(it) } } companion object { diff --git a/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt b/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt index 7f4a2ff1..52f80e28 100644 --- a/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.lemon +import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.lemon.adapter.LemonPlaceAutoCompleteClient import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Disabled @@ -27,9 +28,9 @@ class LemonPlaceAutoCompleteClientTest { @Test fun getAutoCompletedPlaceTest() { val url = "URL을 입력해주세요" - val id = "id를 입력해주세요" + val id = 123L - val originPlace = lemonPlaceAutoCompleteClient.getAutoCompletedPlace(url, id) + val originPlace = lemonPlaceAutoCompleteClient.getAutoCompletedPlace(url, OriginMapId(id)) println("originPlace = $originPlace") } } From cbc060b4ea13e1a0761b90353e6bd59baee099b1 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 20:19:22 +0900 Subject: [PATCH 02/15] feat: only save when OriginPlace is null at DB --- .../domain/place/OriginPlaceService.kt | 4 ++- .../output/persistence/OriginPlacePort.kt | 12 ++----- .../postgresql/adapter/OriginPlaceAdapter.kt | 33 +++---------------- .../persistence/entity/OriginPlaceEntity.kt | 2 +- .../repository/OriginPlaceRepository.kt | 5 ++- 5 files changed, 15 insertions(+), 41 deletions(-) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt index c91fcb9c..ea8905b4 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlaceService.kt @@ -23,7 +23,9 @@ class OriginPlaceService( "No AutoComplete client found for $url", ) val originMapId = originPlaceAutoCompleteClient.extractOriginMapId(plainUrl) - return originPlaceAutoCompleteClient.getAutoCompletedPlace(url = plainUrl, originMapId = originMapId) + return originPlaceQueryPort.findByOriginMapId(originMapId) + ?: originPlaceAutoCompleteClient.getAutoCompletedPlace(url = plainUrl, originMapId = originMapId) + .let { originPlaceCommandPort.save(it) } } private fun getUrlOfRemovedParameters(url: String): String { diff --git a/piikii-application/src/main/kotlin/com/piikii/application/port/output/persistence/OriginPlacePort.kt b/piikii-application/src/main/kotlin/com/piikii/application/port/output/persistence/OriginPlacePort.kt index cc145cf0..a9542c2a 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/port/output/persistence/OriginPlacePort.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/port/output/persistence/OriginPlacePort.kt @@ -1,20 +1,12 @@ package com.piikii.application.port.output.persistence +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace interface OriginPlaceQueryPort { - fun retrieve(id: Long): OriginPlace - - fun retrieveAll(ids: List): List + fun findByOriginMapId(originMapId: OriginMapId): OriginPlace? } interface OriginPlaceCommandPort { fun save(originPlace: OriginPlace): OriginPlace - - fun update( - originPlace: OriginPlace, - id: Long, - ) - - fun delete(id: Long) } diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/adapter/OriginPlaceAdapter.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/adapter/OriginPlaceAdapter.kt index 26eafb46..fed559d0 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/adapter/OriginPlaceAdapter.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/adapter/OriginPlaceAdapter.kt @@ -1,11 +1,11 @@ package com.piikii.output.persistence.postgresql.adapter +import com.piikii.application.domain.place.OriginMapId import com.piikii.application.domain.place.OriginPlace import com.piikii.application.port.output.persistence.OriginPlaceCommandPort import com.piikii.application.port.output.persistence.OriginPlaceQueryPort import com.piikii.output.persistence.postgresql.persistence.entity.OriginPlaceEntity import com.piikii.output.persistence.postgresql.persistence.repository.OriginPlaceRepository -import jakarta.persistence.EntityNotFoundException import org.springframework.stereotype.Repository import org.springframework.transaction.annotation.Transactional @@ -16,34 +16,11 @@ class OriginPlaceAdapter( ) : OriginPlaceCommandPort, OriginPlaceQueryPort { @Transactional override fun save(originPlace: OriginPlace): OriginPlace { - val entity = OriginPlaceEntity.from(originPlace) - originPlaceRepository.save(entity) - return entity.toDomain() + return originPlaceRepository.save(OriginPlaceEntity.from(originPlace)) + .toDomain() } - @Transactional - override fun update( - originPlace: OriginPlace, - id: Long, - ) { - TODO("Not yet implemented") - } - - @Transactional - override fun delete(id: Long) { - TODO("Not yet implemented") - } - - override fun retrieve(id: Long): OriginPlace { - val originPlaceEntity = originPlaceRepository.findById(id) - if (originPlaceEntity.isPresent) { - return originPlaceEntity.get().toDomain() - } - // TODO 예외 정의 - throw EntityNotFoundException() - } - - override fun retrieveAll(ids: List): List { - TODO("Not yet implemented") + override fun findByOriginMapId(originMapId: OriginMapId): OriginPlace? { + return originPlaceRepository.findByOriginMapId(originMapId)?.toDomain() } } diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt index 3cb1de80..2c6a9440 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt @@ -20,7 +20,7 @@ import org.hibernate.annotations.SQLRestriction @SQLDelete(sql = "UPDATE piikii.origin_place SET is_deleted = true WHERE id = ?") @DynamicUpdate class OriginPlaceEntity( - @Column(name = "origin_map_id", nullable = false) + @Column(name = "origin_map_id", nullable = false, unique = true) val originMapId: OriginMapId, @Column(name = "name", length = 255, nullable = false) var name: String, diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/repository/OriginPlaceRepository.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/repository/OriginPlaceRepository.kt index 6c4f3bf3..7266c061 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/repository/OriginPlaceRepository.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/repository/OriginPlaceRepository.kt @@ -1,6 +1,9 @@ package com.piikii.output.persistence.postgresql.persistence.repository +import com.piikii.application.domain.place.OriginMapId import com.piikii.output.persistence.postgresql.persistence.entity.OriginPlaceEntity import org.springframework.data.jpa.repository.JpaRepository -interface OriginPlaceRepository : JpaRepository +interface OriginPlaceRepository : JpaRepository { + fun findByOriginMapId(originMapId: OriginMapId): OriginPlaceEntity? +} From 362450549daa9d08198890922daf26b4e45f0cf9 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 20:26:08 +0900 Subject: [PATCH 03/15] refactor: rename PlaceIdParser to OriginMapIdParser --- .../adapter/AvocadoPlaceAutoCompleteClient.kt | 8 ++++---- ...oPlaceIdParser.kt => AvocadoOriginMapIdParser.kt} | 12 ++++++------ .../avocado/AvocadoPlaceAutoCompleteClientTest.kt | 8 ++++---- .../lemon/adapter/LemonPlaceAutoCompleteClient.kt | 8 ++++---- ...monPlaceIdParser.kt => LemonOriginMapIdParser.kt} | 2 +- 5 files changed, 19 insertions(+), 19 deletions(-) rename piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/{AvocadoPlaceIdParser.kt => AvocadoOriginMapIdParser.kt} (85%) rename piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/{LemonPlaceIdParser.kt => LemonOriginMapIdParser.kt} (96%) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt index ba61c753..362f0564 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt @@ -5,22 +5,22 @@ import com.piikii.application.domain.place.OriginPlace import com.piikii.application.port.output.web.OriginPlaceAutoCompleteClient import com.piikii.common.exception.ExceptionCode import com.piikii.common.exception.PiikiiException -import com.piikii.output.web.avocado.parser.AvocadoPlaceIdParserStrategy +import com.piikii.output.web.avocado.parser.AvocadoOriginMapIdParserStrategy import org.springframework.stereotype.Component import org.springframework.web.client.RestClient import org.springframework.web.client.body @Component class AvocadoPlaceAutoCompleteClient( - private val avocadoPlaceIdParserStrategy: AvocadoPlaceIdParserStrategy, + private val avocadoOriginMapIdParserStrategy: AvocadoOriginMapIdParserStrategy, private val avocadoApiClient: RestClient, ) : OriginPlaceAutoCompleteClient { override fun isAutoCompleteSupportedUrl(url: String): Boolean { - return avocadoPlaceIdParserStrategy.getParserBySupportedUrl(url) != null + return avocadoOriginMapIdParserStrategy.getParserBySupportedUrl(url) != null } override fun extractOriginMapId(url: String): OriginMapId { - return avocadoPlaceIdParserStrategy.getParserBySupportedUrl(url)?.parseOriginMapId(url) + return avocadoOriginMapIdParserStrategy.getParserBySupportedUrl(url)?.parseOriginMapId(url) ?: throw PiikiiException(ExceptionCode.NOT_SUPPORT_AUTO_COMPLETE_URL) } diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt similarity index 85% rename from piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt rename to piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt index aa8d7fe3..91eeb0dc 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoPlaceIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt @@ -6,13 +6,13 @@ import org.springframework.stereotype.Component import org.springframework.web.client.RestClient @Component -class AvocadoPlaceIdParserStrategy(private val parsers: List) { - fun getParserBySupportedUrl(url: String): AvocadoPlaceIdParser? { +class AvocadoOriginMapIdParserStrategy(private val parsers: List) { + fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? { return parsers.find { it.pattern().matches(url) } } } -interface AvocadoPlaceIdParser { +interface AvocadoOriginMapIdParser { fun pattern(): Regex fun parseOriginMapId(url: String): OriginMapId? @@ -32,7 +32,7 @@ interface AvocadoPlaceIdParser { } @Component -class MapPlaceIdParser(properties: AvocadoProperties) : AvocadoPlaceIdParser { +class MapUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { private val patternRegex: Regex = "${properties.url.regex.web}$PLACE_ID_REGEX".toRegex() private val parseRegex: Regex = "${properties.url.regex.web}($PLACE_ID_REGEX)".toRegex() @@ -50,9 +50,9 @@ class MapPlaceIdParser(properties: AvocadoProperties) : AvocadoPlaceIdParser { } @Component -class SharePlaceIdParser( +class ShareUrlIdParser( properties: AvocadoProperties, -) : AvocadoPlaceIdParser { +) : AvocadoOriginMapIdParser { private val regex: Regex = properties.url.regex.share.toRegex() private val idParameterRegex: Regex = "id=(\\d+)".toRegex() private val client: RestClient = RestClient.builder().build() diff --git a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt index 803a35f4..f9ff4045 100644 --- a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt @@ -2,8 +2,8 @@ package com.piikii.output.web.avocado import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.adapter.AvocadoPlaceAutoCompleteClient -import com.piikii.output.web.avocado.parser.MapPlaceIdParser -import com.piikii.output.web.avocado.parser.SharePlaceIdParser +import com.piikii.output.web.avocado.parser.MapUrlIdParser +import com.piikii.output.web.avocado.parser.ShareUrlIdParser import org.assertj.core.api.Assertions.assertThat import org.junit.jupiter.api.Disabled import org.junit.jupiter.api.Test @@ -18,10 +18,10 @@ import org.springframework.test.context.ContextConfiguration @ContextConfiguration(classes = [TestConfiguration::class]) class AvocadoPlaceAutoCompleteClientTest { @Autowired - lateinit var sharePlaceIdParser: SharePlaceIdParser + lateinit var sharePlaceIdParser: ShareUrlIdParser @Autowired - lateinit var mapPlaceIdParser: MapPlaceIdParser + lateinit var mapPlaceIdParser: MapUrlIdParser @Autowired lateinit var avocadoPlaceAutoCompleteClient: AvocadoPlaceAutoCompleteClient diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt index a2a10ad4..155223df 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt @@ -5,22 +5,22 @@ import com.piikii.application.domain.place.OriginPlace import com.piikii.application.port.output.web.OriginPlaceAutoCompleteClient import com.piikii.common.exception.ExceptionCode import com.piikii.common.exception.PiikiiException -import com.piikii.output.web.lemon.parser.LemonPlaceIdParser +import com.piikii.output.web.lemon.parser.LemonOriginMapIdParser import org.springframework.stereotype.Component import org.springframework.web.client.RestClient import org.springframework.web.client.body @Component class LemonPlaceAutoCompleteClient( - private val lemonPlaceIdParser: LemonPlaceIdParser, + private val lemonOriginMapIdParser: LemonOriginMapIdParser, private val lemonApiClient: RestClient, ) : OriginPlaceAutoCompleteClient { override fun isAutoCompleteSupportedUrl(url: String): Boolean { - return lemonPlaceIdParser.isAutoCompleteSupportedUrl(url) + return lemonOriginMapIdParser.isAutoCompleteSupportedUrl(url) } override fun extractOriginMapId(url: String): OriginMapId { - return lemonPlaceIdParser.parseOriginMapId(url) + return lemonOriginMapIdParser.parseOriginMapId(url) ?: throw PiikiiException(ExceptionCode.NOT_SUPPORT_AUTO_COMPLETE_URL) } diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt similarity index 96% rename from piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt rename to piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt index e5ab167e..539b2c17 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonPlaceIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt @@ -5,7 +5,7 @@ import com.piikii.output.web.lemon.config.LemonProperties import org.springframework.stereotype.Component @Component -class LemonPlaceIdParser( +class LemonOriginMapIdParser( properties: LemonProperties, ) { private val patternRegex: Regex = "${properties.url.regex.web}$PLACE_ID_REGEX".toRegex() From 7f320c368c8cfa02a78b69d063fa80c9caceacd5 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 20:46:22 +0900 Subject: [PATCH 04/15] feat: support avocado mobile url --- .../web/avocado/config/AvocadoConfig.kt | 1 + .../parser/AvocadoOriginMapIdParser.kt | 26 +++++++++++++---- .../resources/avocado-config/application.yml | 1 + .../AvocadoPlaceAutoCompleteClientTest.kt | 29 ++++++++++++++----- .../src/test/resources/application-test.yml | 1 + 5 files changed, 45 insertions(+), 13 deletions(-) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/config/AvocadoConfig.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/config/AvocadoConfig.kt index 9ff938aa..cb0127b8 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/config/AvocadoConfig.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/config/AvocadoConfig.kt @@ -54,6 +54,7 @@ data class AvocadoUrl( ) { data class Regex( val web: String, + val mobileWeb: String, val share: String, ) } diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt index 91eeb0dc..1dd9c71e 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt @@ -2,6 +2,7 @@ package com.piikii.output.web.avocado.parser import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.config.AvocadoProperties +import com.piikii.output.web.avocado.parser.AvocadoOriginMapIdParser.Companion.ORIGIN_MAP_IP_REGEX import org.springframework.stereotype.Component import org.springframework.web.client.RestClient @@ -29,23 +30,36 @@ interface AvocadoOriginMapIdParser { ?.toLongOrNull() ?.let { OriginMapId(it) } } + + companion object { + const val ORIGIN_MAP_IP_REGEX = "\\d+" + } } @Component class MapUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { - private val patternRegex: Regex = "${properties.url.regex.web}$PLACE_ID_REGEX".toRegex() - private val parseRegex: Regex = "${properties.url.regex.web}($PLACE_ID_REGEX)".toRegex() + private val regex: Regex = "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex() override fun pattern(): Regex { - return patternRegex + return regex } override fun parseOriginMapId(url: String): OriginMapId? { - return parseRegex.find(url).parseFromMatchResult() + return regex.find(url).parseFromMatchResult() } - companion object { - const val PLACE_ID_REGEX = "\\d+" +} + +@Component +class MapMobileUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { + private val regex: Regex = "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)/home".toRegex() + + override fun pattern(): Regex { + return regex + } + + override fun parseOriginMapId(url: String): OriginMapId? { + return regex.find(url).parseFromMatchResult() } } diff --git a/piikii-output-web/avocado/src/main/resources/avocado-config/application.yml b/piikii-output-web/avocado/src/main/resources/avocado-config/application.yml index 13d5f9b4..e67dd9b4 100644 --- a/piikii-output-web/avocado/src/main/resources/avocado-config/application.yml +++ b/piikii-output-web/avocado/src/main/resources/avocado-config/application.yml @@ -5,6 +5,7 @@ avocado: url: regex: web: ${AVOCADO_WEB_URL_REGEX} + mobile-web: ${AVOCADO_MOBILE_WEB_URL_REGEX} share: ${AVOCADO_SHARE_URL_REGEX} api: ${AVOCADO_API_URL} referer: ${AVOCADO_REFERER_URL} diff --git a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt index f9ff4045..345dc233 100644 --- a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt @@ -2,6 +2,7 @@ package com.piikii.output.web.avocado import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.adapter.AvocadoPlaceAutoCompleteClient +import com.piikii.output.web.avocado.parser.MapMobileUrlIdParser import com.piikii.output.web.avocado.parser.MapUrlIdParser import com.piikii.output.web.avocado.parser.ShareUrlIdParser import org.assertj.core.api.Assertions.assertThat @@ -18,30 +19,44 @@ import org.springframework.test.context.ContextConfiguration @ContextConfiguration(classes = [TestConfiguration::class]) class AvocadoPlaceAutoCompleteClientTest { @Autowired - lateinit var sharePlaceIdParser: ShareUrlIdParser + lateinit var shareUrlIdParser: ShareUrlIdParser @Autowired - lateinit var mapPlaceIdParser: MapUrlIdParser + lateinit var mapUrlIdParser: MapUrlIdParser + + @Autowired + lateinit var mapMobileUrlIdParser: MapMobileUrlIdParser @Autowired lateinit var avocadoPlaceAutoCompleteClient: AvocadoPlaceAutoCompleteClient @Test - fun sharePlaceIdParserTest() { + fun shareUrlIdParserTest() { + val url = "주소를 입력하세요" + + val parse = shareUrlIdParser.parseOriginMapId(url) + println("parse = $parse") + } + + @Test + fun mapUrlIdParserTest() { val url = "주소를 입력하세요" - val parse = sharePlaceIdParser.parseOriginMapId(url) + val pattern = mapUrlIdParser.pattern() + assertThat(pattern.matches(url)).isTrue() + + val parse = mapUrlIdParser.parseOriginMapId(url) println("parse = $parse") } @Test - fun mapPlaceIdParserTest() { + fun mapMobileUrlIdParserTest() { val url = "주소를 입력하세요" - val pattern = mapPlaceIdParser.pattern() + val pattern = mapMobileUrlIdParser.pattern() assertThat(pattern.matches(url)).isTrue() - val parse = mapPlaceIdParser.parseOriginMapId(url) + val parse = mapMobileUrlIdParser.parseOriginMapId(url) println("parse = $parse") } diff --git a/piikii-output-web/avocado/src/test/resources/application-test.yml b/piikii-output-web/avocado/src/test/resources/application-test.yml index 13d5f9b4..e67dd9b4 100644 --- a/piikii-output-web/avocado/src/test/resources/application-test.yml +++ b/piikii-output-web/avocado/src/test/resources/application-test.yml @@ -5,6 +5,7 @@ avocado: url: regex: web: ${AVOCADO_WEB_URL_REGEX} + mobile-web: ${AVOCADO_MOBILE_WEB_URL_REGEX} share: ${AVOCADO_SHARE_URL_REGEX} api: ${AVOCADO_API_URL} referer: ${AVOCADO_REFERER_URL} From 9590aa333cf0a5bf5e189a5f10812fd1b15ecf84 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 21:01:21 +0900 Subject: [PATCH 05/15] feat: support lemon mobile url --- .../output/web/lemon/config/LemonConfig.kt | 1 + .../web/lemon/parser/LemonOriginMapIdParser.kt | 16 ++++++++-------- .../main/resources/lemon-config/application.yml | 1 + .../src/test/resources/application-test.yml | 1 + 4 files changed, 11 insertions(+), 8 deletions(-) diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/config/LemonConfig.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/config/LemonConfig.kt index 36fdae81..30dec31e 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/config/LemonConfig.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/config/LemonConfig.kt @@ -28,5 +28,6 @@ data class LemonUrl( ) { data class Regex( val web: String, + val mobileWeb: String, ) } diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt index 539b2c17..3c3a6b30 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt @@ -8,18 +8,18 @@ import org.springframework.stereotype.Component class LemonOriginMapIdParser( properties: LemonProperties, ) { - private val patternRegex: Regex = "${properties.url.regex.web}$PLACE_ID_REGEX".toRegex() - private val parseRegex: Regex = "${properties.url.regex.web}($PLACE_ID_REGEX)".toRegex() + private val regexes: List = listOf( + "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), + "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)".toRegex() + ) fun isAutoCompleteSupportedUrl(url: String): Boolean { - return patternRegex.matches(url) + return regexes.any { it.matches(url) } } fun parseOriginMapId(url: String): OriginMapId? { - if (!isAutoCompleteSupportedUrl(url)) { - return null - } - return parseRegex.find(url) + return regexes.firstOrNull { it.matches(url) } + ?.find(url) ?.groupValues ?.getOrNull(1) ?.toLongOrNull() @@ -27,6 +27,6 @@ class LemonOriginMapIdParser( } companion object { - const val PLACE_ID_REGEX = "\\d+" + const val ORIGIN_MAP_IP_REGEX = "\\d+" } } diff --git a/piikii-output-web/lemon/src/main/resources/lemon-config/application.yml b/piikii-output-web/lemon/src/main/resources/lemon-config/application.yml index 32e5663c..3511c715 100644 --- a/piikii-output-web/lemon/src/main/resources/lemon-config/application.yml +++ b/piikii-output-web/lemon/src/main/resources/lemon-config/application.yml @@ -2,4 +2,5 @@ lemon: url: regex: web: ${LEMON_WEB_URL_REGEX} + mobile-web: ${LEMON_MOBILE_WEB_URL_REGEX} api: ${LEMON_API_URL} diff --git a/piikii-output-web/lemon/src/test/resources/application-test.yml b/piikii-output-web/lemon/src/test/resources/application-test.yml index 32e5663c..3511c715 100644 --- a/piikii-output-web/lemon/src/test/resources/application-test.yml +++ b/piikii-output-web/lemon/src/test/resources/application-test.yml @@ -2,4 +2,5 @@ lemon: url: regex: web: ${LEMON_WEB_URL_REGEX} + mobile-web: ${LEMON_MOBILE_WEB_URL_REGEX} api: ${LEMON_API_URL} From 45c6657aeab96e692bb7735ad4212e1193723f29 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 21:35:53 +0900 Subject: [PATCH 06/15] feat: thumbnailLinks column to Lob/oid type --- .../postgresql/persistence/entity/OriginPlaceEntity.kt | 4 +++- .../persistence/postgresql/persistence/entity/PlaceEntity.kt | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt index 2c6a9440..c38fed03 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt @@ -9,6 +9,7 @@ import jakarta.persistence.Column import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated +import jakarta.persistence.Lob import jakarta.persistence.Table import org.hibernate.annotations.DynamicUpdate import org.hibernate.annotations.SQLDelete @@ -26,7 +27,8 @@ class OriginPlaceEntity( var name: String, @Column(name = "url", nullable = false, length = 255) val url: String, - @Column(name = "thumbnail_links", nullable = false, length = 255) + @Column(name = "thumbnail_links") + @Lob val thumbnailLinks: String, @Column(name = "address", length = 255) val address: String? = null, diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt index 463c51d8..0740dc15 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt @@ -8,6 +8,7 @@ import jakarta.persistence.Column import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated +import jakarta.persistence.Lob import jakarta.persistence.Table import org.hibernate.annotations.DynamicUpdate import org.hibernate.annotations.SQLDelete @@ -28,7 +29,8 @@ class PlaceEntity( var name: String, @Column(name = "url", length = 255) var url: String?, - @Column(name = "thumbnail_links", length = 255, nullable = false) + @Column(name = "thumbnail_links") + @Lob var thumbnailLinks: String?, @Column(name = "address", length = 255) var address: String?, From beb150c256acbb938a9dc83034c0a1107ebd88b4 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 21:37:14 +0900 Subject: [PATCH 07/15] fix: set nullable field --- .../piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt index 9ec2e146..5982479e 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt @@ -12,7 +12,7 @@ data class LemonPlaceInfoResponse( val isMapUser: String?, val isExist: Boolean?, val basicInfo: BasicInfo, - val comment: Comment, + val comment: Comment?, val menuInfo: MenuInfo, val photo: Photo, ) { @@ -43,7 +43,7 @@ data class LemonPlaceInfoResponse( @JsonProperty("mainphotourl") val mainPhotoUrl: String, @JsonProperty("phonenum") - val phoneNumber: String, + val phoneNumber: String?, val address: Address, val homepage: String?, val category: Category, From 74fb3e643dc8b96e47950e24111b8c9c6a2103ef Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 21:38:06 +0900 Subject: [PATCH 08/15] refactor: avocado combine MapUrlIdParser (Web/Mobile Web) --- .../parser/AvocadoOriginMapIdParser.kt | 35 ++++++------------- .../lemon/parser/LemonOriginMapIdParser.kt | 4 +-- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt index 1dd9c71e..b676db98 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt @@ -9,12 +9,12 @@ import org.springframework.web.client.RestClient @Component class AvocadoOriginMapIdParserStrategy(private val parsers: List) { fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? { - return parsers.find { it.pattern().matches(url) } + return parsers.firstOrNull { it.getParserBySupportedUrl(url) != null } } } interface AvocadoOriginMapIdParser { - fun pattern(): Regex + fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? fun parseOriginMapId(url: String): OriginMapId? @@ -38,28 +38,16 @@ interface AvocadoOriginMapIdParser { @Component class MapUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { - private val regex: Regex = "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex() + private val regexes: List = listOf( + "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), + "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)/home".toRegex(), + ) - override fun pattern(): Regex { - return regex - } + override fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? = + takeIf { regexes.any { regex -> regex.matches(url) } } override fun parseOriginMapId(url: String): OriginMapId? { - return regex.find(url).parseFromMatchResult() - } - -} - -@Component -class MapMobileUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { - private val regex: Regex = "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)/home".toRegex() - - override fun pattern(): Regex { - return regex - } - - override fun parseOriginMapId(url: String): OriginMapId? { - return regex.find(url).parseFromMatchResult() + return regexes.first { it.matches(url) }.find(url).parseFromMatchResult() } } @@ -71,9 +59,8 @@ class ShareUrlIdParser( private val idParameterRegex: Regex = "id=(\\d+)".toRegex() private val client: RestClient = RestClient.builder().build() - override fun pattern(): Regex { - return regex - } + override fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? = + takeIf { regex.matches(url) } override fun parseOriginMapId(url: String): OriginMapId? { val response = diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt index 3c3a6b30..bd8164ce 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt @@ -13,9 +13,7 @@ class LemonOriginMapIdParser( "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)".toRegex() ) - fun isAutoCompleteSupportedUrl(url: String): Boolean { - return regexes.any { it.matches(url) } - } + fun isAutoCompleteSupportedUrl(url: String): Boolean = regexes.any { it.matches(url) } fun parseOriginMapId(url: String): OriginMapId? { return regexes.firstOrNull { it.matches(url) } From f8256f50b1d62f6ef4c6b74b7a7688db538e2fa6 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Fri, 26 Jul 2024 21:39:00 +0900 Subject: [PATCH 09/15] fix: test --- .../AvocadoPlaceAutoCompleteClientTest.kt | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt index 345dc233..dc4fc723 100644 --- a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt @@ -2,7 +2,6 @@ package com.piikii.output.web.avocado import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.adapter.AvocadoPlaceAutoCompleteClient -import com.piikii.output.web.avocado.parser.MapMobileUrlIdParser import com.piikii.output.web.avocado.parser.MapUrlIdParser import com.piikii.output.web.avocado.parser.ShareUrlIdParser import org.assertj.core.api.Assertions.assertThat @@ -25,7 +24,7 @@ class AvocadoPlaceAutoCompleteClientTest { lateinit var mapUrlIdParser: MapUrlIdParser @Autowired - lateinit var mapMobileUrlIdParser: MapMobileUrlIdParser + lateinit var mapMobileUrlIdParser: MapUrlIdParser @Autowired lateinit var avocadoPlaceAutoCompleteClient: AvocadoPlaceAutoCompleteClient @@ -42,24 +41,13 @@ class AvocadoPlaceAutoCompleteClientTest { fun mapUrlIdParserTest() { val url = "주소를 입력하세요" - val pattern = mapUrlIdParser.pattern() - assertThat(pattern.matches(url)).isTrue() + val pattern = mapUrlIdParser.getParserBySupportedUrl(url) + assertThat(pattern).isNotNull() val parse = mapUrlIdParser.parseOriginMapId(url) println("parse = $parse") } - @Test - fun mapMobileUrlIdParserTest() { - val url = "주소를 입력하세요" - - val pattern = mapMobileUrlIdParser.pattern() - assertThat(pattern.matches(url)).isTrue() - - val parse = mapMobileUrlIdParser.parseOriginMapId(url) - println("parse = $parse") - } - @Test fun getAutoCompletedPlaceTest() { val url = "주소를 입력하세요" From 331de4c67e67a2e98157bc6e46bbebd1a05d0c4d Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 14:41:10 +0900 Subject: [PATCH 10/15] feat: thumbnail links field to text --- .../postgresql/persistence/entity/OriginPlaceEntity.kt | 4 +--- .../persistence/postgresql/persistence/entity/PlaceEntity.kt | 4 +--- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt index c38fed03..54659512 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/OriginPlaceEntity.kt @@ -9,7 +9,6 @@ import jakarta.persistence.Column import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated -import jakarta.persistence.Lob import jakarta.persistence.Table import org.hibernate.annotations.DynamicUpdate import org.hibernate.annotations.SQLDelete @@ -27,8 +26,7 @@ class OriginPlaceEntity( var name: String, @Column(name = "url", nullable = false, length = 255) val url: String, - @Column(name = "thumbnail_links") - @Lob + @Column(name = "thumbnail_links", columnDefinition = "TEXT") val thumbnailLinks: String, @Column(name = "address", length = 255) val address: String? = null, diff --git a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt index 0740dc15..6b4d43f9 100644 --- a/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt +++ b/piikii-output-persistence/postgresql/src/main/kotlin/com/piikii/output/persistence/postgresql/persistence/entity/PlaceEntity.kt @@ -8,7 +8,6 @@ import jakarta.persistence.Column import jakarta.persistence.Entity import jakarta.persistence.EnumType import jakarta.persistence.Enumerated -import jakarta.persistence.Lob import jakarta.persistence.Table import org.hibernate.annotations.DynamicUpdate import org.hibernate.annotations.SQLDelete @@ -29,8 +28,7 @@ class PlaceEntity( var name: String, @Column(name = "url", length = 255) var url: String?, - @Column(name = "thumbnail_links") - @Lob + @Column(name = "thumbnail_links", columnDefinition = "TEXT") var thumbnailLinks: String?, @Column(name = "address", length = 255) var address: String?, From 21fbf552236378a4a2920a728dcc64add2d38a2a Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 15:04:07 +0900 Subject: [PATCH 11/15] refactor: update Place request Origin to MANUAL --- .../port/input/dto/request/PlaceRequest.kt | 25 ++----------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/port/input/dto/request/PlaceRequest.kt b/piikii-application/src/main/kotlin/com/piikii/application/port/input/dto/request/PlaceRequest.kt index 308351f6..2548302b 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/port/input/dto/request/PlaceRequest.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/port/input/dto/request/PlaceRequest.kt @@ -46,17 +46,6 @@ data class AddPlaceRequest( @field:Max(value = 5, message = "별점은 5 이하여야 합니다.") @field:Schema(description = "별점 (0-5)", example = "4.5") val starGrade: Float?, - @field:NotNull(message = "장소 정보 제공처") - @field:Schema( - description = "장소 정보 제공처", - allowableValues = [ - "AVOCADO", - "LEMON", - "MANUAL", - ], - example = "MANUAL", - ) - val origin: Origin, @field:NotBlank(message = "메모는 필수이며 빈 문자열이 허용되지 않습니다.") @field:Size(max = 50, message = "메모는 50자를 초과할 수 없습니다.") @field:Schema(description = "메모", example = "맛있는 레스토랑") @@ -83,7 +72,7 @@ data class AddPlaceRequest( address = address, phoneNumber = phoneNumber, starGrade = starGrade, - origin = origin, + origin = Origin.MANUAL, memo = memo, ) } @@ -116,16 +105,6 @@ data class ModifyPlaceRequest( @field:Max(value = 5, message = "별점은 5 이하여야 합니다.") @field:Schema(description = "별점 (0-5)", example = "4.5") val starGrade: Float?, - @field:Schema( - description = "장소 정보 제공처", - allowableValues = [ - "AVOCADO", - "LEMON", - "MANUAL", - ], - example = "MANUAL", - ) - val origin: Origin, @field:NotBlank(message = "메모는 필수이며 빈 문자열이 허용되지 않습니다.") @field:Size(max = 50, message = "메모는 50자를 초과할 수 없습니다.") @field:Schema(description = "메모", example = "맛있는 레스토랑") @@ -153,7 +132,7 @@ data class ModifyPlaceRequest( address = address, phoneNumber = phoneNumber, starGrade = starGrade, - origin = origin, + origin = Origin.MANUAL, memo = memo, ) } From 41529fd6f712c2bd291e8d72c89efca2b6b4d77b Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 15:19:45 +0900 Subject: [PATCH 12/15] feat: added origin prefix to OriginMapId --- .../piikii/application/domain/generic/Origin.kt | 8 ++++---- .../piikii/application/domain/place/OriginPlace.kt | 14 +++++++++++++- .../adapter/AvocadoPlaceAutoCompleteClient.kt | 2 +- .../avocado/adapter/AvocadoPlaceInfoResponse.kt | 2 +- .../web/avocado/parser/AvocadoOriginMapIdParser.kt | 3 ++- .../lemon/adapter/LemonPlaceAutoCompleteClient.kt | 2 +- .../web/lemon/adapter/LemonPlaceInfoResponse.kt | 2 +- .../web/lemon/parser/LemonOriginMapIdParser.kt | 3 ++- 8 files changed, 25 insertions(+), 11 deletions(-) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/generic/Origin.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/generic/Origin.kt index 2ef60bb8..84c5f793 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/generic/Origin.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/generic/Origin.kt @@ -1,7 +1,7 @@ package com.piikii.application.domain.generic -enum class Origin { - AVOCADO, - LEMON, - MANUAL, +enum class Origin(val prefix: String) { + AVOCADO("A"), + LEMON("L"), + MANUAL("M"), } diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt index 28280e71..08e196ed 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt @@ -20,4 +20,16 @@ data class OriginPlace( ) @JvmInline -value class OriginMapId(val value: Long) +value class OriginMapId(val value: String) { + + fun toId(): String { + return value.split(SEPARATOR).last() + } + + companion object { + private const val SEPARATOR: String = "_" + fun of(id: Long, origin: Origin): OriginMapId { + return OriginMapId("${origin.prefix}$SEPARATOR$id") + } + } +} diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt index 362f0564..d90db6f2 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceAutoCompleteClient.kt @@ -29,7 +29,7 @@ class AvocadoPlaceAutoCompleteClient( originMapId: OriginMapId, ): OriginPlace { return avocadoApiClient.get() - .uri("/${originMapId.value}") + .uri("/${originMapId.toId()}") .retrieve() .body() ?.toOriginPlace(url) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt index 1aafca7b..2f3cf857 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/adapter/AvocadoPlaceInfoResponse.kt @@ -28,7 +28,7 @@ data class AvocadoPlaceInfoResponse( fun toOriginPlace(url: String): OriginPlace { return OriginPlace( id = null, - originMapId = OriginMapId(id), + originMapId = OriginMapId.of(id = id, origin = Origin.AVOCADO), name = name, url = url, thumbnailLinks = ThumbnailLinks(images ?: emptyList()), diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt index 91eeb0dc..0d7d0b75 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.avocado.parser +import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.config.AvocadoProperties import org.springframework.stereotype.Component @@ -27,7 +28,7 @@ interface AvocadoOriginMapIdParser { return this?.groupValues ?.getOrNull(1) ?.toLongOrNull() - ?.let { OriginMapId(it) } + ?.let { OriginMapId.of(id = it, origin = Origin.AVOCADO) } } } diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt index 155223df..2379d019 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceAutoCompleteClient.kt @@ -29,7 +29,7 @@ class LemonPlaceAutoCompleteClient( originMapId: OriginMapId, ): OriginPlace { return lemonApiClient.get() - .uri("/${originMapId.value}") + .uri("/${originMapId.toId()}") .retrieve() .body() ?.toOriginPlace(url) diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt index 9ec2e146..5ed46e29 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/adapter/LemonPlaceInfoResponse.kt @@ -21,7 +21,7 @@ data class LemonPlaceInfoResponse( return OriginPlace( id = null, name = basicInfo.name, - originMapId = OriginMapId(basicInfo.cid), + originMapId = OriginMapId.of(id = basicInfo.cid, origin = Origin.LEMON), url = url, thumbnailLinks = ThumbnailLinks(basicInfo.mainPhotoUrl), address = fullAddress, diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt index 539b2c17..b5648000 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.lemon.parser +import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.lemon.config.LemonProperties import org.springframework.stereotype.Component @@ -23,7 +24,7 @@ class LemonOriginMapIdParser( ?.groupValues ?.getOrNull(1) ?.toLongOrNull() - ?.let { OriginMapId(it) } + ?.let { OriginMapId.of(id = it, origin = Origin.LEMON) } } companion object { From 76c59c9880c42d3854a4629bfe0ddc1f07e298ee Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 15:33:11 +0900 Subject: [PATCH 13/15] fix: ktlint --- .../com/piikii/application/domain/place/OriginPlace.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt index 08e196ed..d8df2fbb 100644 --- a/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt +++ b/piikii-application/src/main/kotlin/com/piikii/application/domain/place/OriginPlace.kt @@ -21,14 +21,17 @@ data class OriginPlace( @JvmInline value class OriginMapId(val value: String) { - fun toId(): String { return value.split(SEPARATOR).last() } companion object { private const val SEPARATOR: String = "_" - fun of(id: Long, origin: Origin): OriginMapId { + + fun of( + id: Long, + origin: Origin, + ): OriginMapId { return OriginMapId("${origin.prefix}$SEPARATOR$id") } } From 9588eb4410aeab7ce446a52a3741d9b6ee21d346 Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 15:34:02 +0900 Subject: [PATCH 14/15] fix: ktlint --- .../web/avocado/parser/AvocadoOriginMapIdParser.kt | 12 ++++++------ .../web/lemon/parser/LemonOriginMapIdParser.kt | 9 +++++---- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt index b676db98..18f8952c 100644 --- a/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt +++ b/piikii-output-web/avocado/src/main/kotlin/com/piikii/output/web/avocado/parser/AvocadoOriginMapIdParser.kt @@ -38,10 +38,11 @@ interface AvocadoOriginMapIdParser { @Component class MapUrlIdParser(properties: AvocadoProperties) : AvocadoOriginMapIdParser { - private val regexes: List = listOf( - "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), - "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)/home".toRegex(), - ) + private val regexes: List = + listOf( + "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), + "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)/home".toRegex(), + ) override fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? = takeIf { regexes.any { regex -> regex.matches(url) } } @@ -59,8 +60,7 @@ class ShareUrlIdParser( private val idParameterRegex: Regex = "id=(\\d+)".toRegex() private val client: RestClient = RestClient.builder().build() - override fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? = - takeIf { regex.matches(url) } + override fun getParserBySupportedUrl(url: String): AvocadoOriginMapIdParser? = takeIf { regex.matches(url) } override fun parseOriginMapId(url: String): OriginMapId? { val response = diff --git a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt index bd8164ce..0486ee7e 100644 --- a/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt +++ b/piikii-output-web/lemon/src/main/kotlin/com/piikii/output/web/lemon/parser/LemonOriginMapIdParser.kt @@ -8,10 +8,11 @@ import org.springframework.stereotype.Component class LemonOriginMapIdParser( properties: LemonProperties, ) { - private val regexes: List = listOf( - "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), - "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)".toRegex() - ) + private val regexes: List = + listOf( + "${properties.url.regex.web}($ORIGIN_MAP_IP_REGEX)".toRegex(), + "${properties.url.regex.mobileWeb}($ORIGIN_MAP_IP_REGEX)".toRegex(), + ) fun isAutoCompleteSupportedUrl(url: String): Boolean = regexes.any { it.matches(url) } From 1fec8245f9bfccc7b2142a4cf8493c4fdc16dade Mon Sep 17 00:00:00 2001 From: KimDoubleB Date: Sat, 27 Jul 2024 15:43:28 +0900 Subject: [PATCH 15/15] fix: tests --- .../output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt | 3 ++- .../output/web/lemon/LemonPlaceAutoCompleteClientTest.kt | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt index f9ff4045..1bff0a63 100644 --- a/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/avocado/src/test/kotlin/com/piikii/output/web/avocado/AvocadoPlaceAutoCompleteClientTest.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.avocado +import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.avocado.adapter.AvocadoPlaceAutoCompleteClient import com.piikii.output.web.avocado.parser.MapUrlIdParser @@ -50,7 +51,7 @@ class AvocadoPlaceAutoCompleteClientTest { val url = "주소를 입력하세요" val id = 123L - val originPlace = avocadoPlaceAutoCompleteClient.getAutoCompletedPlace(url, OriginMapId(id)) + val originPlace = avocadoPlaceAutoCompleteClient.getAutoCompletedPlace(url, OriginMapId.of(id, Origin.AVOCADO)) println("originPlace = $originPlace") } } diff --git a/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt b/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt index 52f80e28..54c72b6a 100644 --- a/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt +++ b/piikii-output-web/lemon/src/test/kotlin/com/piikii/output/web/lemon/LemonPlaceAutoCompleteClientTest.kt @@ -1,5 +1,6 @@ package com.piikii.output.web.lemon +import com.piikii.application.domain.generic.Origin import com.piikii.application.domain.place.OriginMapId import com.piikii.output.web.lemon.adapter.LemonPlaceAutoCompleteClient import org.assertj.core.api.Assertions.assertThat @@ -30,7 +31,7 @@ class LemonPlaceAutoCompleteClientTest { val url = "URL을 입력해주세요" val id = 123L - val originPlace = lemonPlaceAutoCompleteClient.getAutoCompletedPlace(url, OriginMapId(id)) + val originPlace = lemonPlaceAutoCompleteClient.getAutoCompletedPlace(url, OriginMapId.of(id, Origin.LEMON)) println("originPlace = $originPlace") } }