From b07eada277058f37fc5cba05cf064a753bdd63de Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 14 Jan 2026 15:21:33 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EA=B5=AD=EA=B0=80=20=EC=BB=A8=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=EB=A1=9C=20=EC=BA=94=20=EC=A1=B0=ED=9A=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../vividnext/sodalive/can/CanController.kt | 7 ++----- .../co/vividnext/sodalive/can/CanService.kt | 13 +++++++----- .../vividnext/sodalive/common/GeoCountry.kt | 8 -------- .../sodalive/common/GeoCountryFilter.kt | 20 ------------------- 4 files changed, 10 insertions(+), 38 deletions(-) delete mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountry.kt delete mode 100644 src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountryFilter.kt diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanController.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanController.kt index 6418cd14..f97698c2 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanController.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanController.kt @@ -1,7 +1,6 @@ package kr.co.vividnext.sodalive.can import kr.co.vividnext.sodalive.common.ApiResponse -import kr.co.vividnext.sodalive.common.GeoCountry import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable @@ -10,15 +9,13 @@ import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RequestParam import org.springframework.web.bind.annotation.RestController -import javax.servlet.http.HttpServletRequest @RestController @RequestMapping("/can") class CanController(private val service: CanService) { @GetMapping - fun getCans(request: HttpServletRequest): ApiResponse> { - val geoCountry = request.getAttribute("geoCountry") as? GeoCountry ?: GeoCountry.OTHER - return ApiResponse.ok(service.getCans(geoCountry)) + fun getCans(): ApiResponse> { + return ApiResponse.ok(service.getCans()) } @GetMapping("/status") diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt index 5e4a493d..24994f33 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/can/CanService.kt @@ -3,7 +3,7 @@ package kr.co.vividnext.sodalive.can import kr.co.vividnext.sodalive.can.charge.ChargeStatus import kr.co.vividnext.sodalive.can.payment.PaymentGateway import kr.co.vividnext.sodalive.can.use.CanUsage -import kr.co.vividnext.sodalive.common.GeoCountry +import kr.co.vividnext.sodalive.common.CountryContext import kr.co.vividnext.sodalive.member.Member import org.springframework.data.domain.Pageable import org.springframework.stereotype.Service @@ -11,10 +11,13 @@ import java.time.ZoneId import java.time.format.DateTimeFormatter @Service -class CanService(private val repository: CanRepository) { - fun getCans(geoCountry: GeoCountry): List { - val currency = when (geoCountry) { - GeoCountry.KR -> "KRW" +class CanService( + private val repository: CanRepository, + private val countryContext: CountryContext +) { + fun getCans(): List { + val currency = when (countryContext.countryCode) { + "KR" -> "KRW" else -> "USD" } return repository.findAllByStatusAndCurrency(status = CanStatus.SALE, currency = currency) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountry.kt b/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountry.kt deleted file mode 100644 index be44f326..00000000 --- a/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountry.kt +++ /dev/null @@ -1,8 +0,0 @@ -package kr.co.vividnext.sodalive.common - -const val WAF_GEO_HEADER = "x-amzn-waf-geo-country" - -enum class GeoCountry { KR, OTHER } - -fun parseGeo(headerValue: String?): GeoCountry = - if (headerValue?.trim()?.uppercase() == "KR") GeoCountry.KR else GeoCountry.OTHER diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountryFilter.kt b/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountryFilter.kt deleted file mode 100644 index 1981f60c..00000000 --- a/src/main/kotlin/kr/co/vividnext/sodalive/common/GeoCountryFilter.kt +++ /dev/null @@ -1,20 +0,0 @@ -package kr.co.vividnext.sodalive.common - -import org.springframework.stereotype.Component -import org.springframework.web.filter.OncePerRequestFilter -import javax.servlet.FilterChain -import javax.servlet.http.HttpServletRequest -import javax.servlet.http.HttpServletResponse - -@Component -class GeoCountryFilter : OncePerRequestFilter() { - override fun doFilterInternal( - request: HttpServletRequest, - response: HttpServletResponse, - filterChain: FilterChain - ) { - val country = parseGeo(request.getHeader(WAF_GEO_HEADER)) - request.setAttribute("geoCountry", country) - filterChain.doFilter(request, response) - } -} From 9dc23f06225c730a25faab9f14460993c019766c Mon Sep 17 00:00:00 2001 From: Klaus Date: Wed, 14 Jan 2026 15:34:24 +0900 Subject: [PATCH 2/2] =?UTF-8?q?=ED=9A=8C=EC=9B=90=20=EA=B5=AD=EA=B0=80=20?= =?UTF-8?q?=EC=BD=94=EB=93=9C=20=EC=A0=80=EC=9E=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../kr/co/vividnext/sodalive/member/Member.kt | 5 ++++- .../co/vividnext/sodalive/member/MemberService.kt | 14 ++++++++++---- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/Member.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/Member.kt index 0a9ba25b..a30b31c6 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/Member.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/Member.kt @@ -47,7 +47,10 @@ data class Member( var isActive: Boolean = true, - var container: String = "web" + var container: String = "web", + + // ISO 3166-1 alpha-2 국가 코드 + var countryCode: String? = null ) : BaseEntity() { @OneToMany(mappedBy = "member", cascade = [CascadeType.ALL]) val stipulationAgrees: MutableList = mutableListOf() diff --git a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt index f1d34e63..5d053cc1 100644 --- a/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt +++ b/src/main/kotlin/kr/co/vividnext/sodalive/member/MemberService.kt @@ -7,6 +7,7 @@ import kr.co.vividnext.sodalive.can.charge.ChargeRepository import kr.co.vividnext.sodalive.can.payment.CanPaymentService import kr.co.vividnext.sodalive.can.use.CanUsage import kr.co.vividnext.sodalive.common.ApiResponse +import kr.co.vividnext.sodalive.common.CountryContext import kr.co.vividnext.sodalive.common.SodaException import kr.co.vividnext.sodalive.content.order.OrderService import kr.co.vividnext.sodalive.email.SendEmailService @@ -99,6 +100,7 @@ class MemberService( private val messageSource: SodaMessageSource, private val langContext: LangContext, + private val countryContext: CountryContext, private val objectMapper: ObjectMapper, @@ -133,7 +135,8 @@ class MemberService( nickname = nickname, profileImage = "profile/default-profile.png", gender = Gender.NONE, - container = request.container + container = request.container, + countryCode = countryContext.countryCode ) if (!request.marketingPid.isNullOrBlank()) { @@ -390,7 +393,8 @@ class MemberService( password = passwordEncoder.encode(request.password), nickname = request.nickname, gender = request.gender, - container = request.container + container = request.container, + countryCode = countryContext.countryCode ) if (!request.marketingPid.isNullOrBlank()) { @@ -848,7 +852,8 @@ class MemberService( profileImage = "profile/default-profile.png", gender = Gender.NONE, provider = MemberProvider.GOOGLE, - container = container + container = container, + countryCode = countryContext.countryCode ) if (!marketingPid.isNullOrBlank()) { @@ -904,7 +909,8 @@ class MemberService( profileImage = "profile/default-profile.png", gender = Gender.NONE, provider = MemberProvider.KAKAO, - container = container + container = container, + countryCode = countryContext.countryCode ) if (!marketingPid.isNullOrBlank()) {