Skip to content
This repository has been archived by the owner on Dec 7, 2024. It is now read-only.

Commit

Permalink
Merge pull request #331 from GSM-MSG/330-refactor/sign-in-bussiness-code
Browse files Browse the repository at this point in the history
🔀 :: 330 �로그인 API 리팩토링
  • Loading branch information
KimTaeO authored Apr 16, 2024
2 parents dc4e6f0 + 701a4d0 commit 69b0a72
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 67 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ class SignInServiceImpl(
private val authUtil: AuthUtil,
) : SignInService {


override fun execute(signInDto: SignInDto): SignInResponseDto {
val gAuthToken: GAuthToken = gAuth.generateToken(
signInDto.code,
Expand All @@ -34,19 +33,15 @@ class SignInServiceImpl(
gAuthProperties.redirectUri
)
val gAuthUserInfo: GAuthUserInfo = gAuth.getUserInfo(gAuthToken.accessToken)
val role = getRoleByGauthInfo(gAuthUserInfo.role, gAuthUserInfo.email)
val token = signInDto.token
val role = getRoleByGAuthInfo(gAuthUserInfo.role, gAuthUserInfo.email)
val token = signInDto.token ?: ""

val accessToken: String = jwtTokenProvider.generateAccessToken(gAuthUserInfo.email, role)
val refreshToken: String = jwtTokenProvider.generateRefreshToken(gAuthUserInfo.email, role)
val accessExp: ZonedDateTime = jwtTokenProvider.accessExpiredTime
val refreshExp: ZonedDateTime = jwtTokenProvider.refreshExpiredTime

if(role == Role.ROLE_ADMIN) {
createAdminOrRefreshToken(gAuthUserInfo, refreshToken, token)
} else {
createUserOrRefreshToken(gAuthUserInfo, refreshToken, token)
}
createUserByRoleOrRefreshToken(gAuthUserInfo, refreshToken, token, role)

return SignInResponseDto(
accessToken = accessToken,
Expand All @@ -56,7 +51,7 @@ class SignInServiceImpl(
)
}

private fun getRoleByGauthInfo(role: String, email: String): Role {
private fun getRoleByGAuthInfo(role: String, email: String): Role {
val user = userRepository.findByEmail(email) ?:
return when (role) {
"ROLE_STUDENT" -> Role.ROLE_STUDENT
Expand All @@ -68,22 +63,10 @@ class SignInServiceImpl(
return Role.ROLE_STUDENT
}

private fun createUserOrRefreshToken(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?) {
private fun createUserByRoleOrRefreshToken(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String, role: Role) {
val userInfo = userRepository.findByEmail(gAuthUserInfo.email)
if (userInfo == null) {
authUtil.saveNewUser(gAuthUserInfo, refreshToken, token)
} else {
authUtil.saveNewRefreshToken(userInfo, refreshToken, token)
}
}
?: authUtil.saveNewUser(gAuthUserInfo, refreshToken, token, role)

private fun createAdminOrRefreshToken(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?) {
val adminInfo = userRepository.findByEmail(gAuthUserInfo.email)
if (adminInfo == null) {
authUtil.saveNewAdmin(gAuthUserInfo, refreshToken, token)
} else {
authUtil.saveNewRefreshToken(adminInfo, refreshToken, token)
}
authUtil.saveRefreshToken(userInfo, refreshToken, token)
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.msg.gcms.domain.auth.util

import com.msg.gcms.domain.auth.domain.Role
import com.msg.gcms.domain.auth.domain.entity.RefreshToken
import com.msg.gcms.domain.auth.presentation.data.dto.DeviceTokenDto
import com.msg.gcms.domain.auth.presentation.data.dto.SignInDto
Expand All @@ -13,10 +14,7 @@ interface AuthConverter {

fun toDto(signInRequestDto: SignInRequestDto): SignInDto
fun toDto(deviceTokenRequest: DeviceTokenRequest): DeviceTokenDto

fun toEntity(gAuthUserInfo: GAuthUserInfo): User

fun toAdminEntity(gAuthUserInfo: GAuthUserInfo): User
fun toEntity(gAuthUserInfo: GAuthUserInfo, role: Role): User

fun toEntity(userInfo: User, refreshToken: String): RefreshToken
fun toEntity(userId: UUID?, refreshToken: String): RefreshToken
Expand Down
8 changes: 3 additions & 5 deletions src/main/kotlin/com/msg/gcms/domain/auth/util/AuthUtil.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
package com.msg.gcms.domain.auth.util

import com.msg.gcms.domain.auth.domain.Role
import com.msg.gcms.domain.auth.domain.entity.RefreshToken
import com.msg.gcms.domain.user.domain.entity.User
import gauth.GAuthUserInfo


interface AuthUtil {

fun saveNewUser(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?)

fun saveNewAdmin(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?)

fun saveNewRefreshToken(userInfo: User, refreshToken: String, token: String?): RefreshToken
fun saveNewUser(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String, role: Role): User
fun saveRefreshToken(userInfo: User, refreshToken: String, token: String): RefreshToken
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,28 +23,15 @@ class AuthConverterImpl : AuthConverter {
override fun toDto(deviceTokenRequest: DeviceTokenRequest): DeviceTokenDto =
DeviceTokenDto(deviceTokenRequest.token)


override fun toEntity(gAuthUserInfo: GAuthUserInfo): User =
User(
id = UUID.randomUUID(),
email = gAuthUserInfo.email,
nickname = gAuthUserInfo.name,
grade = gAuthUserInfo.grade,
classNum = gAuthUserInfo.classNum,
number = gAuthUserInfo.num,
roles = mutableListOf(Role.ROLE_STUDENT),
profileImg = gAuthUserInfo.profileUrl,
)

override fun toAdminEntity(gAuthUserInfo: GAuthUserInfo): User =
override fun toEntity(gAuthUserInfo: GAuthUserInfo, role: Role): User =
User(
id = UUID.randomUUID(),
email = gAuthUserInfo.email,
nickname = gAuthUserInfo.name,
grade = 0,
classNum = 0,
number = 0,
roles = mutableListOf(Role.ROLE_ADMIN),
grade = gAuthUserInfo.grade ?: 0,
classNum = gAuthUserInfo.classNum ?: 0,
number = gAuthUserInfo.num ?: 0,
roles = mutableListOf(role),
profileImg = gAuthUserInfo.profileUrl,
)

Expand Down
22 changes: 12 additions & 10 deletions src/main/kotlin/com/msg/gcms/domain/auth/util/impl/AuthUtilImpl.kt
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.msg.gcms.domain.auth.util.impl

import com.msg.gcms.domain.auth.domain.Role
import com.msg.gcms.domain.auth.domain.entity.RefreshToken
import com.msg.gcms.domain.auth.domain.repository.RefreshTokenRepository
import com.msg.gcms.domain.auth.util.AuthConverter
Expand All @@ -19,20 +20,21 @@ class AuthUtilImpl(
private val deviceTokenRepository: DeviceTokenRepository
) : AuthUtil {

override fun saveNewUser(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?) {
val signInUserInfo: User = authConverter.toEntity(gAuthUserInfo)
override fun saveNewUser(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String, role: Role): User {
val user = authConverter.toEntity(gAuthUserInfo, role)
.let { userRepository.save(it) }
saveNewRefreshToken(signInUserInfo, refreshToken, token)
}

override fun saveNewAdmin(gAuthUserInfo: GAuthUserInfo, refreshToken: String, token: String?) {
val signInAdminInfo: User = authConverter.toAdminEntity(gAuthUserInfo)
.let { userRepository.save(it) }
saveNewRefreshToken(signInAdminInfo, refreshToken, token)
return user
}

override fun saveNewRefreshToken(userInfo: User, refreshToken: String, token: String?): RefreshToken {
deviceTokenRepository.save(DeviceToken(userInfo.id, userInfo, token ?: ""))
override fun saveRefreshToken(userInfo: User, refreshToken: String, token: String): RefreshToken {
deviceTokenRepository.save(
DeviceToken(
userId = userInfo.id,
user = userInfo,
token = token
)
)
return authConverter.toEntity(userInfo, refreshToken)
.let { refreshTokenRepository.save(it) }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ import com.msg.gcms.domain.user.domain.repository.DeviceTokenRepository
import com.msg.gcms.domain.user.domain.repository.UserRepository
import com.msg.gcms.global.gauth.properties.GAuthProperties
import com.msg.gcms.global.security.jwt.JwtTokenProvider
import com.msg.gcms.global.util.MessageSendUtil
import gauth.GAuth
import gauth.GAuthToken
import gauth.GAuthUserInfo
Expand Down Expand Up @@ -102,7 +101,7 @@ class SignInServiceTest : BehaviorSpec({
)

every {
authUtil.saveNewRefreshToken(userInfo = user, refreshToken = refreshToken, "")
authUtil.saveRefreshToken(userInfo = user, refreshToken = refreshToken, "")
} returns refreshTokenEntity

val signInDto = SignInDto(
Expand All @@ -129,10 +128,6 @@ class SignInServiceTest : BehaviorSpec({
tokenProvider.refreshExpiredTime
} returns refreshExp

every {
authConverter.toEntity(gAuthUserInfo)
} returns user

every {
authConverter.toEntity(user, refreshToken)
} returns refreshTokenEntity
Expand Down

0 comments on commit 69b0a72

Please sign in to comment.