이것은 TIL레포지토리에 남기자.
이전 코드
@Service
@Transactional
class RegistrationService(
private val userRepository: UserRepository,
private val jwtUtil: JwtUtil,
) {
fun signup(name: String, email: String, password: String): SignupResultDto {
if (userRepository.findByEmail(email) != null) {
throw SignupFailed()
}
val id = userRepository.generateId()
val user = User(
id = id,
name = name,
email = email,
encodedPassword = argonUtil.encodePassword(password),
createdAt = Clock.System.now().toLocalDateTime(TimeZone.UTC),
)
userRepository.save(user)
val accessToken = jwtUtil.encode(userId = user.id)
return SignupResultDto(
accessToken = accessToken,
user = UserDto(
id = user.id,
name = user.name,
),
)
}
}
바뀐코드
@Service
@Transactional
class SignupInteractor(
private val userRepository: UserRepository,
private val jwtUtil: JwtUtil,
) {
fun signup(signupDto: SignupDto): SignupResultDto {
val user = createUser(
name = signupDto.name,
email = signupDto.email,
password = signupDto.password,
)
val accessToken = createAccessToken(user = user)
return SignupResultDto(
accessToken = accessToken,
user = UserDto(
id = user.id,
name = user.name,
),
)
}
private fun createUser(
name: String,
email: String,
password: String,
): User {
if (!userRepository.exists(email = email)) {
throw AlreadyExistingUser()
}
val user = User.create(
repository = userRepository,
name = name,
email = email,
password = password
)
return user
}
private fun createAccessToken(user: User): String {
return jwtUtil.encode(userId = user.id)
}
}
<span> 을 활용하는 올바른 방법