package roomescape.member.business import io.github.oshai.kotlinlogging.KotlinLogging import org.springframework.stereotype.Service import org.springframework.transaction.annotation.Transactional import roomescape.member.implement.MemberFinder import roomescape.member.implement.MemberWriter import roomescape.member.infrastructure.persistence.MemberEntity import roomescape.member.infrastructure.persistence.Role import roomescape.member.web.* private val log = KotlinLogging.logger {} @Service class MemberService( private val memberWriter: MemberWriter, private val memberFinder: MemberFinder, ) { @Transactional(readOnly = true) fun findMembers(): MemberRetrieveListResponse { log.debug { "[MemberService.findMembers] 시작" } return memberFinder.findAll() .toRetrieveListResponse() .also { log.info { "[MemberService.findMembers] 완료. ${it.members.size}명 반환" } } } @Transactional(readOnly = true) fun findById(memberId: Long): MemberEntity { log.debug { "[MemberService.findById] 시작" } return memberFinder.findById(memberId) .also { log.info { "[MemberService.findById] 완료. memberId=${memberId}, email=${it.email}" } } } @Transactional fun createMember(request: SignupRequest): SignupResponse { log.debug { "[MemberService.createMember] 시작" } return memberWriter.create(request.name, request.email, request.password, Role.MEMBER) .toSignupResponse() .also { log.info { "[MemberService.create] 완료: email=${request.email} memberId=${it.id}" } } } }