From 7f95e568026d615a79a0826874733735fab096f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:00:28 +0900 Subject: [PATCH 01/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20application=20in?= =?UTF-8?q?/port=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/application/port/in/PassPopupUseCase.kt | 13 +++++++++++++ .../application/port/in/QueryPassInfoUseCase.kt | 13 +++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/PassPopupUseCase.kt create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/QueryPassInfoUseCase.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/PassPopupUseCase.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/PassPopupUseCase.kt new file mode 100644 index 0000000..c6ceefc --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/PassPopupUseCase.kt @@ -0,0 +1,13 @@ +package hs.kr.entrydsm.user.domain.auth.application.port.`in` + +import hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.request.PassPopupRequest + +/** + * 패스 팝업 생성 기능을 정의하는 UseCase 인터페이스입니다. + */ +interface PassPopupUseCase { + /** + * 패스 인증 팝업을 생성합니다. + */ + fun generatePopup(request: PassPopupRequest): String +} diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/QueryPassInfoUseCase.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/QueryPassInfoUseCase.kt new file mode 100644 index 0000000..ba6f694 --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/in/QueryPassInfoUseCase.kt @@ -0,0 +1,13 @@ +package hs.kr.entrydsm.user.domain.auth.application.port.`in` + +import hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.resopnse.QueryPassInfoResponse + +/** + * 패스 인증 정보 조회 기능을 정의하는 UseCase 인터페이스입니다. + */ +interface QueryPassInfoUseCase { + /** + * 토큰을 이용하여 패스 인증 정보를 조회합니다. + */ + fun queryPassInfo(token: String?): QueryPassInfoResponse +} From d85f1a4e66396cd157a5786e83ee5e5f1fec5477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:01:58 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20application=20se?= =?UTF-8?q?rvice=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../application/service/PassPopupService.kt | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt new file mode 100644 index 0000000..8cd7442 --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt @@ -0,0 +1,113 @@ +package hs.kr.entrydsm.user.domain.auth.application.service + +import hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.request.PassPopupRequest +import hs.kr.entrydsm.user.domain.auth.application.port.`in`.PassPopupUseCase +import hs.kr.entrydsm.user.global.exception.InternalServerErrorException +import hs.kr.entrydsm.user.global.utils.pass.RedirectUrlChecker +import kcb.module.v3.OkCert +import org.json.JSONObject +import org.springframework.beans.factory.annotation.Value +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional + +/** + * 패스 팝업 생성 비즈니스 로직을 처리하는 서비스 클래스입니다. + */ +@Service +class PassPopupService( + private val redirectUrlChecker: RedirectUrlChecker, +) : PassPopupUseCase { + companion object { + private const val TARGET = "PROD" + } + + @Value("\${pass.site-name}") + private lateinit var siteName: String + + @Value("\${pass.site-url}") + private lateinit var siteUrl: String + + @Value("\${pass.popup-url}") + private lateinit var popupUrl: String + + @Value("\${pass.cp-cd}") + private lateinit var cpCd: String + + @Value("\${pass.license}") + private lateinit var license: String + + private val svcName = "IDS_HS_POPUP_START" + + private val rqstCausCd = "00" + + /** + * 패스 인증 팝업 HTML을 생성합니다. + */ + @Transactional + override fun generatePopup(passPopupRequest: PassPopupRequest): String { + redirectUrlChecker.checkRedirectUrl(passPopupRequest.redirectUrl) + try { + val reqJson = JSONObject() + reqJson.put("RETURN_URL", passPopupRequest.redirectUrl) + reqJson.put("SITE_NAME", siteName) + reqJson.put("SITE_URL", siteUrl) + reqJson.put("RQST_CAUS_CD", rqstCausCd) + + val reqStr: String = reqJson.toString() + + val okcert = OkCert() + + val resultStr: String = okcert.callOkCert(TARGET, cpCd, svcName, license, reqStr) + + val resJson = JSONObject(resultStr) + + val rsltCd: String = resJson.getString("RSLT_CD") + val rsltMsg: String = resJson.getString("RSLT_MSG") + var mdlTkn = "" + + var succ = false + + if ("B000" == rsltCd && resJson.has("MDL_TKN")) { + mdlTkn = resJson.getString("MDL_TKN") + succ = true + } + + val htmlBuilder = StringBuilder() + htmlBuilder.append("") + htmlBuilder.append("KCB 휴대폰 본인확인 서비스 샘플 2") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("
") + htmlBuilder.append( + "", + ) + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("
") + htmlBuilder.append("") + htmlBuilder.append("") + htmlBuilder.append("") + + return htmlBuilder.toString() + } catch (e: Exception) { + println(e.message) + throw InternalServerErrorException + } + } +} From 51a12d479c8245ec41153208524df839caefbb35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:02:32 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20in/web=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/adapter/in/web/PassInfoController.kt | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/PassInfoController.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/PassInfoController.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/PassInfoController.kt new file mode 100644 index 0000000..5c7db04 --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/PassInfoController.kt @@ -0,0 +1,40 @@ +package hs.kr.entrydsm.user.domain.auth.adapter.`in`.web + +import hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.request.PassPopupRequest +import hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.resopnse.QueryPassInfoResponse +import hs.kr.entrydsm.user.domain.auth.application.port.`in`.PassPopupUseCase +import hs.kr.entrydsm.user.domain.auth.application.port.`in`.QueryPassInfoUseCase +import hs.kr.entrydsm.user.global.document.auth.AuthApiDocument +import jakarta.validation.Valid +import org.springframework.web.bind.annotation.GetMapping +import org.springframework.web.bind.annotation.PostMapping +import org.springframework.web.bind.annotation.RequestBody +import org.springframework.web.bind.annotation.RequestMapping +import org.springframework.web.bind.annotation.RequestParam +import org.springframework.web.bind.annotation.RestController + +/** + * 패스 인증 관련 HTTP 요청을 처리하는 REST 컨트롤러 클래스입니다. + */ +@RestController +@RequestMapping("/user/verify") +class PassInfoController( + private val passPopupUseCase: PassPopupUseCase, + private val queryPassInfoUseCase: QueryPassInfoUseCase, +) : AuthApiDocument { + /** + * 패스 인증 정보를 조회합니다. + */ + @GetMapping("/info") + override fun getPassInfo( + @RequestParam("mdl_tkn") token: String, + ): QueryPassInfoResponse = queryPassInfoUseCase.queryPassInfo(token) + + /** + * 패스 인증 팝업을 생성합니다. + */ + @PostMapping("/popup") + override fun popupPass( + @RequestBody request: @Valid PassPopupRequest, + ): String = passPopupUseCase.generatePopup(request) +} From 6332078ee23773adc847d7d81f7c03a89ff5bc7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:02:47 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20in/web=20dto=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../adapter/in/web/dto/request/PassPopupRequest.kt | 11 +++++++++++ .../in/web/dto/resopnse/QueryPassInfoResponse.kt | 9 +++++++++ 2 files changed, 20 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/request/PassPopupRequest.kt create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/resopnse/QueryPassInfoResponse.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/request/PassPopupRequest.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/request/PassPopupRequest.kt new file mode 100644 index 0000000..0ecc451 --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/request/PassPopupRequest.kt @@ -0,0 +1,11 @@ +package hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.request + +import jakarta.validation.constraints.NotBlank + +/** + * 패스 팝업 생성 요청 데이터를 담는 DTO 클래스입니다. + */ +data class PassPopupRequest( + @NotBlank(message = "redirect_url은 Null 또는 공백 또는 띄어쓰기를 허용하지 않습니다.") + val redirectUrl: String, +) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/resopnse/QueryPassInfoResponse.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/resopnse/QueryPassInfoResponse.kt new file mode 100644 index 0000000..b50213e --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/in/web/dto/resopnse/QueryPassInfoResponse.kt @@ -0,0 +1,9 @@ +package hs.kr.entrydsm.user.domain.auth.adapter.`in`.web.dto.resopnse + +/** + * 패스 인증 정보 조회 응답 데이터를 담는 DTO 클래스입니다. + */ +data class QueryPassInfoResponse( + val phoneNumber: String, + val name: String, +) From b0d6809135699806cac3e8abc5fb87d5e87afda7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:04:05 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20adapter/out=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/domain/auth/adapter/out/PassInfo.kt | 24 +++++++++++++++++ .../out/repository/PassInfoRepository.kt | 27 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt new file mode 100644 index 0000000..4aaf5ac --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt @@ -0,0 +1,24 @@ +package hs.kr.entrydsm.user.domain.auth.adapter.out + +import org.springframework.data.annotation.Id +import org.springframework.data.redis.core.RedisHash +import org.springframework.data.redis.core.TimeToLive +import org.springframework.data.redis.core.index.Indexed + +/** + * Redis에 저장되는 Pass 인증 정보를 나타내는 클래스입니다. + * Pass 인증을 통해 검증된 사용자 정보를 임시로 저장합니다. + * + * @property name 암호화된 사용자 이름 (Redis 키로 사용) + * @property phoneNumber 암호화된 전화번호 + * @property ttl Time To Live (데이터 만료 시간, 초 단위) + */ +@RedisHash +class PassInfo( + @Id + val name: String, + @Indexed + val phoneNumber: String, + @TimeToLive + val ttl: Long, +) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt new file mode 100644 index 0000000..de343cf --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt @@ -0,0 +1,27 @@ +package hs.kr.entrydsm.user.domain.auth.adapter.out.repository + +import hs.kr.entrydsm.user.domain.auth.adapter.out.PassInfo +import org.springframework.data.repository.CrudRepository +import java.util.Optional + +/** + * Pass 인증 정보를 위한 Redis 저장소 인터페이스입니다. + * Spring Data Redis를 통해 Pass 인증 데이터의 관리를 담당합니다. + */ +interface PassInfoRepository : CrudRepository { + /** + * 전화번호로 Pass 인증 정보를 조회합니다. + * + * @param phoneNumber 조회할 전화번호 + * @return Pass 인증 정보 Optional + */ + fun findByPhoneNumber(phoneNumber: String): Optional + + /** + * 전화번호로 Pass 인증 정보 존재 여부를 확인합니다. + * + * @param phoneNumber 확인할 전화번호 + * @return Pass 인증 정보 존재 여부 + */ + fun existsByPhoneNumber(phoneNumber: String): Boolean +} From 81f784e981b428f1e740cc86ab246002cc18030d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:04:23 +0900 Subject: [PATCH 06/11] feat ( #13 ) : add gitkit --- .../hs/kr/entrydsm/user/domain/auth/application/port/out/.gitkit | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/out/.gitkit diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/out/.gitkit b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/port/out/.gitkit new file mode 100644 index 0000000..e69de29 From 1263db55267278e9bb6c219a04d03a9bdb1489a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Mon, 28 Jul 2025 15:17:32 +0900 Subject: [PATCH 07/11] =?UTF-8?q?feat=20(=20#13=20)=20:=20adapter/out=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80=20[=20refreshToken=20]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../refreshtoken/adapter/out/RefreshToken.kt | 38 +++++++++++++++++++ .../out/repository/RefreshTokenRepository.kt | 14 +++++++ 2 files changed, 52 insertions(+) create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt create mode 100644 casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/repository/RefreshTokenRepository.kt diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt new file mode 100644 index 0000000..62fbdfe --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt @@ -0,0 +1,38 @@ +package hs.kr.entrydsm.user.domain.refreshtoken.adapter.out + +import org.springframework.data.annotation.Id +import org.springframework.data.redis.core.RedisHash +import org.springframework.data.redis.core.TimeToLive +import org.springframework.data.redis.core.index.Indexed + +/** + * Redis에 저장되는 리프레시 토큰 정보를 나타내는 클래스입니다. + * JWT 리프레시 토큰을 관리하여 토큰 갱신을 처리합니다. + * + * @property id 사용자 ID (Redis 키로 사용) + * @property token 리프레시 토큰 값 + * @property ttl Time To Live (토큰 만료 시간, 초 단위) + */ +@RedisHash +class RefreshToken( + @Id + val id: String, + @Indexed + var token: String, + @TimeToLive + var ttl: Long, +) { + /** + * 리프레시 토큰과 TTL을 업데이트합니다. + * + * @param token 새로운 리프레시 토큰 + * @param ttl 새로운 만료 시간 (초) + */ + fun update( + token: String?, + ttl: Long, + ) { + this.token = token!! + this.ttl = ttl + } +} diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/repository/RefreshTokenRepository.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/repository/RefreshTokenRepository.kt new file mode 100644 index 0000000..d0ee8f5 --- /dev/null +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/repository/RefreshTokenRepository.kt @@ -0,0 +1,14 @@ +package hs.kr.entrydsm.user.domain.refreshtoken.adapter.out.repository + +import hs.kr.entrydsm.user.domain.refreshtoken.adapter.out.RefreshToken +import org.springframework.data.repository.CrudRepository + +/** + * 리프레시 토큰에 대한 Redis 액세스를 담당하는 리포지토리 인터페이스입니다. + */ +interface RefreshTokenRepository : CrudRepository { + /** + * 토큰 값으로 리프레시 토큰을 조회합니다. + */ + fun findByToken(token: String): RefreshToken? +} From f24591228b256fe513414d2b0e69e8327c53b309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Tue, 29 Jul 2025 18:35:01 +0900 Subject: [PATCH 08/11] =?UTF-8?q?refactor=20(=20#13=20)=20:=20@Id=EB=A5=BC?= =?UTF-8?q?=20name=EC=97=90=EC=84=9C=20phoneNumber=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/domain/auth/adapter/out/PassInfo.kt | 10 +++++----- .../adapter/out/repository/PassInfoRepository.kt | 14 -------------- 2 files changed, 5 insertions(+), 19 deletions(-) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt index 4aaf5ac..3fcca5e 100644 --- a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt @@ -9,16 +9,16 @@ import org.springframework.data.redis.core.index.Indexed * Redis에 저장되는 Pass 인증 정보를 나타내는 클래스입니다. * Pass 인증을 통해 검증된 사용자 정보를 임시로 저장합니다. * - * @property name 암호화된 사용자 이름 (Redis 키로 사용) - * @property phoneNumber 암호화된 전화번호 + * @property phoneNumber 암호화된 전화번호 (Redis 키로 사용) + * @property name 암호화된 사용자 이름 * @property ttl Time To Live (데이터 만료 시간, 초 단위) */ @RedisHash class PassInfo( @Id - val name: String, - @Indexed val phoneNumber: String, + @Indexed + val name: String, @TimeToLive - val ttl: Long, + val ttl: Long ) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt index de343cf..cd2496c 100644 --- a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/repository/PassInfoRepository.kt @@ -9,19 +9,5 @@ import java.util.Optional * Spring Data Redis를 통해 Pass 인증 데이터의 관리를 담당합니다. */ interface PassInfoRepository : CrudRepository { - /** - * 전화번호로 Pass 인증 정보를 조회합니다. - * - * @param phoneNumber 조회할 전화번호 - * @return Pass 인증 정보 Optional - */ - fun findByPhoneNumber(phoneNumber: String): Optional - /** - * 전화번호로 Pass 인증 정보 존재 여부를 확인합니다. - * - * @param phoneNumber 확인할 전화번호 - * @return Pass 인증 정보 존재 여부 - */ - fun existsByPhoneNumber(phoneNumber: String): Boolean } From d4ede1ba015a96d6082a3a750df3b1a4e3e1f245 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Tue, 29 Jul 2025 18:45:48 +0900 Subject: [PATCH 09/11] =?UTF-8?q?refactor=20(=20#13=20)=20:=20phoneNumberH?= =?UTF-8?q?ash=EB=A1=9C=20=EC=A1=B0=ED=9A=8C=ED=95=A0=20=EC=88=98=20?= =?UTF-8?q?=EC=9E=88=EA=B2=8C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt index 3fcca5e..7ca1f9b 100644 --- a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/adapter/out/PassInfo.kt @@ -16,8 +16,8 @@ import org.springframework.data.redis.core.index.Indexed @RedisHash class PassInfo( @Id + val phoneNumberHash: String, val phoneNumber: String, - @Indexed val name: String, @TimeToLive val ttl: Long From bbf106f5f53b1c6ecd420545ff89c17d1a442c7c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Wed, 30 Jul 2025 15:49:39 +0900 Subject: [PATCH 10/11] =?UTF-8?q?refactor=20(=20#13=20)=20:=20logger?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/domain/auth/application/service/PassPopupService.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt index 8cd7442..b339263 100644 --- a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/auth/application/service/PassPopupService.kt @@ -19,6 +19,7 @@ class PassPopupService( ) : PassPopupUseCase { companion object { private const val TARGET = "PROD" + private val logger = LoggerFactory.getLogger(PassPopupService::class.java) } @Value("\${pass.site-name}") @@ -106,7 +107,7 @@ class PassPopupService( return htmlBuilder.toString() } catch (e: Exception) { - println(e.message) + logger.error("Pass popup 생성 중 오류 발생: ${e.message}", e) throw InternalServerErrorException } } From e7b2e1e8352847d8d267dc2be72e339b0951688b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EB=B0=95=EC=A3=BC=EC=9B=90?= Date: Wed, 30 Jul 2025 16:06:48 +0900 Subject: [PATCH 11/11] =?UTF-8?q?refactor=20(=20#13=20)=20:=20=EC=99=9C=20?= =?UTF-8?q?=EC=9E=88=EB=8A=94=20=EC=A7=80=20=EB=AA=A8=EB=A5=BC=20non-null?= =?UTF-8?q?=20=EC=BA=90=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../user/domain/refreshtoken/adapter/out/RefreshToken.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt index 62fbdfe..a261008 100644 --- a/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt +++ b/casper-user/src/main/kotlin/hs/kr/entrydsm/user/domain/refreshtoken/adapter/out/RefreshToken.kt @@ -29,10 +29,10 @@ class RefreshToken( * @param ttl 새로운 만료 시간 (초) */ fun update( - token: String?, + token: String, ttl: Long, ) { - this.token = token!! + this.token = token this.ttl = ttl } }