refactor: common.persistence 모듈 분리로 인한 기존 서비스 코드 수정

This commit is contained in:
이상진 2025-09-27 20:18:50 +09:00
parent 5b31672ebb
commit 07869020be
7 changed files with 56 additions and 63 deletions

View File

@ -1,23 +1,22 @@
package com.sangdol.roomescape.auth.business 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.KLogger
import io.github.oshai.kotlinlogging.KotlinLogging import io.github.oshai.kotlinlogging.KotlinLogging
import org.springframework.stereotype.Service import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Propagation import org.springframework.transaction.annotation.Propagation
import org.springframework.transaction.annotation.Transactional 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 {} private val log: KLogger = KotlinLogging.logger {}
@Service @Service
class LoginHistoryService( class LoginHistoryService(
private val loginHistoryRepository: LoginHistoryRepository, private val loginHistoryRepository: LoginHistoryRepository,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
) { ) {
@Transactional(propagation = Propagation.REQUIRES_NEW) @Transactional(propagation = Propagation.REQUIRES_NEW)
fun createSuccessHistory( fun createSuccessHistory(
@ -47,7 +46,7 @@ class LoginHistoryService(
runCatching { runCatching {
LoginHistoryEntity( LoginHistoryEntity(
id = tsidFactory.next(), id = idGenerator.create(),
principalId = principalId, principalId = principalId,
principalType = principalType, principalType = principalType,
success = success, success = success,

View File

@ -1,16 +1,15 @@
package com.sangdol.roomescape.payment.business package com.sangdol.roomescape.payment.business
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.roomescape.payment.exception.PaymentErrorCode import com.sangdol.roomescape.payment.exception.PaymentErrorCode
import com.sangdol.roomescape.payment.exception.PaymentException import com.sangdol.roomescape.payment.exception.PaymentException
import com.sangdol.roomescape.payment.infrastructure.client.* import com.sangdol.roomescape.payment.infrastructure.client.*
import com.sangdol.roomescape.payment.infrastructure.common.PaymentMethod import com.sangdol.roomescape.payment.infrastructure.common.PaymentMethod
import com.sangdol.roomescape.payment.infrastructure.common.PaymentType import com.sangdol.roomescape.payment.infrastructure.common.PaymentType
import com.sangdol.roomescape.payment.infrastructure.persistence.* 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 import java.time.LocalDateTime
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -20,7 +19,7 @@ class PaymentWriter(
private val paymentRepository: PaymentRepository, private val paymentRepository: PaymentRepository,
private val paymentDetailRepository: PaymentDetailRepository, private val paymentDetailRepository: PaymentDetailRepository,
private val canceledPaymentRepository: CanceledPaymentRepository, private val canceledPaymentRepository: CanceledPaymentRepository,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
) { ) {
fun createPayment( fun createPayment(
@ -32,7 +31,7 @@ class PaymentWriter(
log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 시작: reservationId=${reservationId}, paymentKey=${paymentClientConfirmResponse.paymentKey}" } log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 시작: reservationId=${reservationId}, paymentKey=${paymentClientConfirmResponse.paymentKey}" }
return paymentClientConfirmResponse.toEntity( return paymentClientConfirmResponse.toEntity(
id = tsidFactory.next(), reservationId, orderId, paymentType id = idGenerator.create(), reservationId, orderId, paymentType
).also { ).also {
paymentRepository.save(it) paymentRepository.save(it)
log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 완료: reservationId=${reservationId}, payment.id=${it.id}" } log.info { "[PaymentWriterV2.createPayment] 결제 승인 및 결제 정보 저장 완료: reservationId=${reservationId}, payment.id=${it.id}" }
@ -44,7 +43,7 @@ class PaymentWriter(
paymentId: Long, paymentId: Long,
): PaymentDetailEntity { ): PaymentDetailEntity {
val method: PaymentMethod = paymentResponse.method val method: PaymentMethod = paymentResponse.method
val id = tsidFactory.next() val id = idGenerator.create()
if (method == PaymentMethod.TRANSFER) { if (method == PaymentMethod.TRANSFER) {
return paymentDetailRepository.save(paymentResponse.toTransferDetailEntity(id, paymentId)) return paymentDetailRepository.save(paymentResponse.toTransferDetailEntity(id, paymentId))
@ -69,7 +68,7 @@ class PaymentWriter(
paymentRepository.save(payment.apply { this.cancel() }) paymentRepository.save(payment.apply { this.cancel() })
return cancelResponse.cancels.toEntity( return cancelResponse.cancels.toEntity(
id = tsidFactory.next(), id = idGenerator.create(),
paymentId = payment.id, paymentId = payment.id,
cancelRequestedAt = requestedAt, cancelRequestedAt = requestedAt,
canceledBy = userId canceledBy = userId

View File

@ -1,12 +1,6 @@
package com.sangdol.roomescape.reservation.business package com.sangdol.roomescape.reservation.business
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.roomescape.common.dto.CurrentUserContext import com.sangdol.roomescape.common.dto.CurrentUserContext
import com.sangdol.roomescape.payment.business.PaymentService import com.sangdol.roomescape.payment.business.PaymentService
import com.sangdol.roomescape.payment.web.PaymentWithDetailResponse 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.theme.business.ThemeService
import com.sangdol.roomescape.user.business.UserService import com.sangdol.roomescape.user.business.UserService
import com.sangdol.roomescape.user.web.UserContactResponse 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 import java.time.LocalDateTime
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -33,7 +32,7 @@ class ReservationService(
private val userService: UserService, private val userService: UserService,
private val themeService: ThemeService, private val themeService: ThemeService,
private val canceledReservationRepository: CanceledReservationRepository, private val canceledReservationRepository: CanceledReservationRepository,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
private val paymentService: PaymentService private val paymentService: PaymentService
) { ) {
@ -46,7 +45,7 @@ class ReservationService(
validateCanCreate(request) 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) return PendingReservationCreateResponse(reservationRepository.save(reservation).id)
.also { log.info { "[ReservationService.createPendingReservation] Pending 예약 생성 완료: reservationId=${it}, schedule=${request.scheduleId}" } } .also { log.info { "[ReservationService.createPendingReservation] Pending 예약 생성 완료: reservationId=${it}, schedule=${request.scheduleId}" } }
@ -141,7 +140,7 @@ class ReservationService(
} }
CanceledReservationEntity( CanceledReservationEntity(
id = tsidFactory.next(), id = idGenerator.create(),
reservationId = reservation.id, reservationId = reservation.id,
canceledBy = user.id, canceledBy = user.id,
cancelReason = cancelReason, cancelReason = cancelReason,

View File

@ -1,14 +1,8 @@
package com.sangdol.roomescape.schedule.business package com.sangdol.roomescape.schedule.business
import ScheduleException import ScheduleException
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.admin.business.AdminService 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.AuditInfo
import com.sangdol.roomescape.common.dto.OperatorInfo import com.sangdol.roomescape.common.dto.OperatorInfo
import com.sangdol.roomescape.schedule.business.domain.ScheduleOverview 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.ScheduleRepository
import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus import com.sangdol.roomescape.schedule.infrastructure.persistence.ScheduleStatus
import com.sangdol.roomescape.schedule.web.* 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 import java.time.LocalDate
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -35,7 +34,7 @@ private val log: KLogger = KotlinLogging.logger {}
class ScheduleService( class ScheduleService(
private val scheduleRepository: ScheduleRepository, private val scheduleRepository: ScheduleRepository,
private val scheduleValidator: ScheduleValidator, private val scheduleValidator: ScheduleValidator,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
private val adminService: AdminService private val adminService: AdminService
) { ) {
// ======================================== // ========================================
@ -112,7 +111,7 @@ class ScheduleService(
scheduleValidator.validateCanCreate(storeId, request) scheduleValidator.validateCanCreate(storeId, request)
val schedule = ScheduleEntityFactory.create( val schedule = ScheduleEntityFactory.create(
id = tsidFactory.next(), id = idGenerator.create(),
date = request.date, date = request.date,
time = request.time, time = request.time,
storeId = storeId, storeId = storeId,

View File

@ -1,12 +1,7 @@
package com.sangdol.roomescape.store.business package com.sangdol.roomescape.store.business
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.roomescape.admin.business.AdminService 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.AuditInfo
import com.sangdol.roomescape.region.business.RegionService import com.sangdol.roomescape.region.business.RegionService
import com.sangdol.roomescape.store.exception.StoreErrorCode 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.StoreRepository
import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus import com.sangdol.roomescape.store.infrastructure.persistence.StoreStatus
import com.sangdol.roomescape.store.web.* 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 {} private val log: KLogger = KotlinLogging.logger {}
@ -24,7 +23,7 @@ class StoreService(
private val storeValidator: StoreValidator, private val storeValidator: StoreValidator,
private val adminService: AdminService, private val adminService: AdminService,
private val regionService: RegionService, private val regionService: RegionService,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
) { ) {
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun getDetail(id: Long): DetailStoreResponse { fun getDetail(id: Long): DetailStoreResponse {
@ -45,7 +44,7 @@ class StoreService(
storeValidator.validateCanRegister(request) storeValidator.validateCanRegister(request)
val store = StoreEntity( val store = StoreEntity(
id = tsidFactory.next(), id = idGenerator.create(),
name = request.name, name = request.name,
address = request.address, address = request.address,
contact = request.contact, contact = request.contact,

View File

@ -1,13 +1,7 @@
package com.sangdol.roomescape.theme.business package com.sangdol.roomescape.theme.business
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.admin.business.AdminService 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.AuditInfo
import com.sangdol.roomescape.common.util.DateUtils import com.sangdol.roomescape.common.util.DateUtils
import com.sangdol.roomescape.theme.exception.ThemeErrorCode 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.ThemeEntity
import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository import com.sangdol.roomescape.theme.infrastructure.persistence.ThemeRepository
import com.sangdol.roomescape.theme.web.* 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 import java.time.LocalDate
private val log: KLogger = KotlinLogging.logger {} private val log: KLogger = KotlinLogging.logger {}
@ -30,7 +29,7 @@ private val log: KLogger = KotlinLogging.logger {}
class ThemeService( class ThemeService(
private val themeRepository: ThemeRepository, private val themeRepository: ThemeRepository,
private val themeValidator: ThemeValidator, private val themeValidator: ThemeValidator,
private val tsidFactory: TsidFactory, private val idGenerator: IDGenerator,
private val adminService: AdminService private val adminService: AdminService
) { ) {
// ======================================== // ========================================
@ -91,7 +90,7 @@ class ThemeService(
themeValidator.validateCanCreate(request) themeValidator.validateCanCreate(request)
val theme: ThemeEntity = request.toEntity(id = tsidFactory.next()) val theme: ThemeEntity = request.toEntity(id = idGenerator.create())
.also { themeRepository.save(it) } .also { themeRepository.save(it) }
return ThemeCreateResponse(theme.id).also { return ThemeCreateResponse(theme.id).also {

View File

@ -1,12 +1,6 @@
package com.sangdol.roomescape.user.business package com.sangdol.roomescape.user.business
import com.github.f4b6a3.tsid.TsidFactory import com.sangdol.common.persistence.IDGenerator
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.roomescape.common.dto.CurrentUserContext import com.sangdol.roomescape.common.dto.CurrentUserContext
import com.sangdol.roomescape.common.dto.UserLoginCredentials import com.sangdol.roomescape.common.dto.UserLoginCredentials
import com.sangdol.roomescape.common.dto.toCredentials 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.UserCreateRequest
import com.sangdol.roomescape.user.web.UserCreateResponse import com.sangdol.roomescape.user.web.UserCreateResponse
import com.sangdol.roomescape.user.web.toEntity 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 {} private val log: KLogger = KotlinLogging.logger {}
@ -27,7 +26,7 @@ class UserService(
private val userRepository: UserRepository, private val userRepository: UserRepository,
private val userStatusHistoryRepository: UserStatusHistoryRepository, private val userStatusHistoryRepository: UserStatusHistoryRepository,
private val userValidator: UserValidator, private val userValidator: UserValidator,
private val tsidFactory: TsidFactory private val idGenerator: IDGenerator
) { ) {
@Transactional(readOnly = true) @Transactional(readOnly = true)
fun findContextById(id: Long): CurrentUserContext { fun findContextById(id: Long): CurrentUserContext {
@ -74,7 +73,7 @@ class UserService(
userValidator.validateCanSignup(request.email, request.phone) userValidator.validateCanSignup(request.email, request.phone)
val user: UserEntity = userRepository.save( val user: UserEntity = userRepository.save(
request.toEntity(id = tsidFactory.next(), status = UserStatus.ACTIVE) request.toEntity(id = idGenerator.create(), status = UserStatus.ACTIVE)
).also { ).also {
log.info { "[UserService.signup] 회원 저장 완료: id:${it.id}" } log.info { "[UserService.signup] 회원 저장 완료: id:${it.id}" }
}.also { }.also {
@ -94,7 +93,7 @@ class UserService(
private fun createHistory(user: UserEntity, reason: String): UserStatusHistoryEntity { private fun createHistory(user: UserEntity, reason: String): UserStatusHistoryEntity {
return userStatusHistoryRepository.save( 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 { ).also {
log.info { "[UserService.signup] 회원 상태 이력 저장 완료: userStatusHistoryId:${it.id}" } log.info { "[UserService.signup] 회원 상태 이력 저장 완료: userStatusHistoryId:${it.id}" }
} }