From 07869020be24b995e358a39684c561c7b7ab467f Mon Sep 17 00:00:00 2001 From: pricelees Date: Sat, 27 Sep 2025 20:18:50 +0900 Subject: [PATCH] =?UTF-8?q?refactor:=20common.persistence=20=EB=AA=A8?= =?UTF-8?q?=EB=93=88=20=EB=B6=84=EB=A6=AC=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20?= =?UTF-8?q?=EA=B8=B0=EC=A1=B4=20=EC=84=9C=EB=B9=84=EC=8A=A4=20=EC=BD=94?= =?UTF-8?q?=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../auth/business/LoginHistoryService.kt | 15 +++++++-------- .../payment/business/PaymentWriter.kt | 17 ++++++++--------- .../business/ReservationService.kt | 19 +++++++++---------- .../schedule/business/ScheduleService.kt | 17 ++++++++--------- .../roomescape/store/business/StoreService.kt | 15 +++++++-------- .../roomescape/theme/business/ThemeService.kt | 17 ++++++++--------- .../roomescape/user/business/UserService.kt | 19 +++++++++---------- 7 files changed, 56 insertions(+), 63 deletions(-) diff --git a/service/src/main/kotlin/com/sangdol/roomescape/auth/business/LoginHistoryService.kt b/service/src/main/kotlin/com/sangdol/roomescape/auth/business/LoginHistoryService.kt index 680c1a91..2f6f7ba1 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/auth/business/LoginHistoryService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/auth/business/LoginHistoryService.kt @@ -1,23 +1,22 @@ package com.sangdol.roomescape.auth.business -import com.github.f4b6a3.tsid.TsidFactory +import com.sangdol.common.persistence.IDGenerator +import com.sangdol.roomescape.auth.infrastructure.persistence.LoginHistoryEntity +import com.sangdol.roomescape.auth.infrastructure.persistence.LoginHistoryRepository +import com.sangdol.roomescape.auth.web.LoginContext +import com.sangdol.roomescape.common.dto.PrincipalType import io.github.oshai.kotlinlogging.KLogger import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Propagation import org.springframework.transaction.annotation.Transactional -import com.sangdol.roomescape.auth.infrastructure.persistence.LoginHistoryEntity -import com.sangdol.roomescape.auth.infrastructure.persistence.LoginHistoryRepository -import com.sangdol.roomescape.auth.web.LoginContext -import com.sangdol.roomescape.common.config.next -import com.sangdol.roomescape.common.dto.PrincipalType private val log: KLogger = KotlinLogging.logger {} @Service class LoginHistoryService( private val loginHistoryRepository: LoginHistoryRepository, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, ) { @Transactional(propagation = Propagation.REQUIRES_NEW) fun createSuccessHistory( @@ -47,7 +46,7 @@ class LoginHistoryService( runCatching { LoginHistoryEntity( - id = tsidFactory.next(), + id = idGenerator.create(), principalId = principalId, principalType = principalType, success = success, diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentWriter.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentWriter.kt index 16ff6d59..06226ec4 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentWriter.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/PaymentWriter.kt @@ -1,16 +1,15 @@ package com.sangdol.roomescape.payment.business -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.stereotype.Component -import com.sangdol.roomescape.common.config.next +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.payment.exception.PaymentErrorCode import com.sangdol.roomescape.payment.exception.PaymentException import com.sangdol.roomescape.payment.infrastructure.client.* import com.sangdol.roomescape.payment.infrastructure.common.PaymentMethod import com.sangdol.roomescape.payment.infrastructure.common.PaymentType import com.sangdol.roomescape.payment.infrastructure.persistence.* +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.stereotype.Component import java.time.LocalDateTime private val log: KLogger = KotlinLogging.logger {} @@ -20,7 +19,7 @@ class PaymentWriter( private val paymentRepository: PaymentRepository, private val paymentDetailRepository: PaymentDetailRepository, private val canceledPaymentRepository: CanceledPaymentRepository, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, ) { fun createPayment( @@ -32,7 +31,7 @@ class PaymentWriter( log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 시작: reservationId=${reservationId}, paymentKey=${paymentClientConfirmResponse.paymentKey}" } return paymentClientConfirmResponse.toEntity( - id = tsidFactory.next(), reservationId, orderId, paymentType + id = idGenerator.create(), reservationId, orderId, paymentType ).also { paymentRepository.save(it) log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 완료: reservationId=${reservationId}, payment.id=${it.id}" } @@ -44,7 +43,7 @@ class PaymentWriter( paymentId: Long, ): PaymentDetailEntity { val method: PaymentMethod = paymentResponse.method - val id = tsidFactory.next() + val id = idGenerator.create() if (method == PaymentMethod.TRANSFER) { return paymentDetailRepository.save(paymentResponse.toTransferDetailEntity(id, paymentId)) @@ -69,7 +68,7 @@ class PaymentWriter( paymentRepository.save(payment.apply { this.cancel() }) return cancelResponse.cancels.toEntity( - id = tsidFactory.next(), + id = idGenerator.create(), paymentId = payment.id, cancelRequestedAt = requestedAt, canceledBy = userId diff --git a/service/src/main/kotlin/com/sangdol/roomescape/reservation/business/ReservationService.kt b/service/src/main/kotlin/com/sangdol/roomescape/reservation/business/ReservationService.kt index 4f7c1fd0..7f53de4d 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/reservation/business/ReservationService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/reservation/business/ReservationService.kt @@ -1,12 +1,6 @@ package com.sangdol.roomescape.reservation.business -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.data.repository.findByIdOrNull -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import com.sangdol.roomescape.common.config.next +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.common.dto.CurrentUserContext import com.sangdol.roomescape.payment.business.PaymentService import com.sangdol.roomescape.payment.web.PaymentWithDetailResponse @@ -21,6 +15,11 @@ import com.sangdol.roomescape.schedule.web.ScheduleUpdateRequest import com.sangdol.roomescape.theme.business.ThemeService import com.sangdol.roomescape.user.business.UserService import com.sangdol.roomescape.user.web.UserContactResponse +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import java.time.LocalDateTime private val log: KLogger = KotlinLogging.logger {} @@ -33,7 +32,7 @@ class ReservationService( private val userService: UserService, private val themeService: ThemeService, private val canceledReservationRepository: CanceledReservationRepository, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, private val paymentService: PaymentService ) { @@ -46,7 +45,7 @@ class ReservationService( validateCanCreate(request) - val reservation: ReservationEntity = request.toEntity(id = tsidFactory.next(), userId = user.id) + val reservation: ReservationEntity = request.toEntity(id = idGenerator.create(), userId = user.id) return PendingReservationCreateResponse(reservationRepository.save(reservation).id) .also { log.info { "[ReservationService.createPendingReservation] Pending 예약 생성 완료: reservationId=${it}, schedule=${request.scheduleId}" } } @@ -141,7 +140,7 @@ class ReservationService( } CanceledReservationEntity( - id = tsidFactory.next(), + id = idGenerator.create(), reservationId = reservation.id, canceledBy = user.id, cancelReason = cancelReason, diff --git a/service/src/main/kotlin/com/sangdol/roomescape/schedule/business/ScheduleService.kt b/service/src/main/kotlin/com/sangdol/roomescape/schedule/business/ScheduleService.kt index 8195a8eb..6dd9e231 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/schedule/business/ScheduleService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/schedule/business/ScheduleService.kt @@ -1,14 +1,8 @@ package com.sangdol.roomescape.schedule.business import ScheduleException -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.data.repository.findByIdOrNull -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.admin.business.AdminService -import com.sangdol.roomescape.common.config.next import com.sangdol.roomescape.common.dto.AuditInfo import com.sangdol.roomescape.common.dto.OperatorInfo import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview @@ -18,6 +12,11 @@ import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleEntity import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleRepository import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.web.* +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import java.time.LocalDate private val log: KLogger = KotlinLogging.logger {} @@ -35,7 +34,7 @@ private val log: KLogger = KotlinLogging.logger {} class ScheduleService( private val scheduleRepository: ScheduleRepository, private val scheduleValidator: ScheduleValidator, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, private val adminService: AdminService ) { // ======================================== @@ -112,7 +111,7 @@ class ScheduleService( scheduleValidator.validateCanCreate(storeId, request) val schedule = ScheduleEntityFactory.create( - id = tsidFactory.next(), + id = idGenerator.create(), date = request.date, time = request.time, storeId = storeId, diff --git a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt index a95db5c4..2afb8e1f 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/store/business/StoreService.kt @@ -1,12 +1,7 @@ package com.sangdol.roomescape.store.business -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.admin.business.AdminService -import com.sangdol.roomescape.common.config.next import com.sangdol.roomescape.common.dto.AuditInfo import com.sangdol.roomescape.region.business.RegionService import com.sangdol.roomescape.store.exception.StoreErrorCode @@ -15,6 +10,10 @@ import com.sangdol.roomescape.store.infrastructure.persistence.StoreEntity import com.sangdol.roomescape.store.infrastructure.persistence.StoreRepository import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus import com.sangdol.roomescape.store.web.* +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional private val log: KLogger = KotlinLogging.logger {} @@ -24,7 +23,7 @@ class StoreService( private val storeValidator: StoreValidator, private val adminService: AdminService, private val regionService: RegionService, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, ) { @Transactional(readOnly = true) fun getDetail(id: Long): DetailStoreResponse { @@ -45,7 +44,7 @@ class StoreService( storeValidator.validateCanRegister(request) val store = StoreEntity( - id = tsidFactory.next(), + id = idGenerator.create(), name = request.name, address = request.address, contact = request.contact, diff --git a/service/src/main/kotlin/com/sangdol/roomescape/theme/business/ThemeService.kt b/service/src/main/kotlin/com/sangdol/roomescape/theme/business/ThemeService.kt index 28770ace..73a1926a 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/theme/business/ThemeService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/theme/business/ThemeService.kt @@ -1,13 +1,7 @@ package com.sangdol.roomescape.theme.business -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.data.repository.findByIdOrNull -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.admin.business.AdminService -import com.sangdol.roomescape.common.config.next import com.sangdol.roomescape.common.dto.AuditInfo import com.sangdol.roomescape.common.util.DateUtils import com.sangdol.roomescape.theme.exception.ThemeErrorCode @@ -15,6 +9,11 @@ import com.sangdol.roomescape.theme.exception.ThemeException import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeEntity import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository import com.sangdol.roomescape.theme.web.* +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional import java.time.LocalDate private val log: KLogger = KotlinLogging.logger {} @@ -30,7 +29,7 @@ private val log: KLogger = KotlinLogging.logger {} class ThemeService( private val themeRepository: ThemeRepository, private val themeValidator: ThemeValidator, - private val tsidFactory: TsidFactory, + private val idGenerator: IDGenerator, private val adminService: AdminService ) { // ======================================== @@ -91,7 +90,7 @@ class ThemeService( themeValidator.validateCanCreate(request) - val theme: ThemeEntity = request.toEntity(id = tsidFactory.next()) + val theme: ThemeEntity = request.toEntity(id = idGenerator.create()) .also { themeRepository.save(it) } return ThemeCreateResponse(theme.id).also { diff --git a/service/src/main/kotlin/com/sangdol/roomescape/user/business/UserService.kt b/service/src/main/kotlin/com/sangdol/roomescape/user/business/UserService.kt index 866ef7d6..2139bc14 100644 --- a/service/src/main/kotlin/com/sangdol/roomescape/user/business/UserService.kt +++ b/service/src/main/kotlin/com/sangdol/roomescape/user/business/UserService.kt @@ -1,12 +1,6 @@ package com.sangdol.roomescape.user.business -import com.github.f4b6a3.tsid.TsidFactory -import io.github.oshai.kotlinlogging.KLogger -import io.github.oshai.kotlinlogging.KotlinLogging -import org.springframework.data.repository.findByIdOrNull -import org.springframework.stereotype.Service -import org.springframework.transaction.annotation.Transactional -import com.sangdol.roomescape.common.config.next +import com.sangdol.common.persistence.IDGenerator import com.sangdol.roomescape.common.dto.CurrentUserContext import com.sangdol.roomescape.common.dto.UserLoginCredentials import com.sangdol.roomescape.common.dto.toCredentials @@ -17,6 +11,11 @@ import com.sangdol.roomescape.user.web.UserContactResponse import com.sangdol.roomescape.user.web.UserCreateRequest import com.sangdol.roomescape.user.web.UserCreateResponse import com.sangdol.roomescape.user.web.toEntity +import io.github.oshai.kotlinlogging.KLogger +import io.github.oshai.kotlinlogging.KotlinLogging +import org.springframework.data.repository.findByIdOrNull +import org.springframework.stereotype.Service +import org.springframework.transaction.annotation.Transactional private val log: KLogger = KotlinLogging.logger {} @@ -27,7 +26,7 @@ class UserService( private val userRepository: UserRepository, private val userStatusHistoryRepository: UserStatusHistoryRepository, private val userValidator: UserValidator, - private val tsidFactory: TsidFactory + private val idGenerator: IDGenerator ) { @Transactional(readOnly = true) fun findContextById(id: Long): CurrentUserContext { @@ -74,7 +73,7 @@ class UserService( userValidator.validateCanSignup(request.email, request.phone) val user: UserEntity = userRepository.save( - request.toEntity(id = tsidFactory.next(), status = UserStatus.ACTIVE) + request.toEntity(id = idGenerator.create(), status = UserStatus.ACTIVE) ).also { log.info { "[UserService.signup] 회원 저장 완료: id:${it.id}" } }.also { @@ -94,7 +93,7 @@ class UserService( private fun createHistory(user: UserEntity, reason: String): UserStatusHistoryEntity { return userStatusHistoryRepository.save( - UserStatusHistoryEntity(id = tsidFactory.next(), userId = user.id, reason = reason, status = user.status) + UserStatusHistoryEntity(id = idGenerator.create(), userId = user.id, reason = reason, status = user.status) ).also { log.info { "[UserService.signup] 회원 상태 이력 저장 완료: userStatusHistoryId:${it.id}" } }