This repository was archived by the owner on Jul 7, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathUserCommandService.kt
More file actions
97 lines (85 loc) · 3.87 KB
/
UserCommandService.kt
File metadata and controls
97 lines (85 loc) · 3.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.asap.application.user.service
import com.asap.application.user.exception.UserException
import com.asap.application.user.port.`in`.DeleteUserUsecase
import com.asap.application.user.port.`in`.RegisterUserUsecase
import com.asap.application.user.port.`in`.UpdateUserUsecase
import com.asap.application.user.port.out.UserAuthManagementPort
import com.asap.application.user.port.out.UserManagementPort
import com.asap.application.user.port.out.UserTokenConvertPort
import com.asap.application.user.port.out.UserTokenManagementPort
import com.asap.domain.common.DomainId
import com.asap.domain.user.entity.User
import com.asap.domain.user.entity.UserAuth
import com.asap.domain.user.entity.UserToken
import com.asap.domain.user.vo.UserPermission
import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
@Service
@Transactional
class UserCommandService(
private val userTokenConvertPort: UserTokenConvertPort,
private val userAuthManagementPort: UserAuthManagementPort,
private val userManagementPort: UserManagementPort,
private val userTokenManagementPort: UserTokenManagementPort,
) : RegisterUserUsecase,
DeleteUserUsecase,
UpdateUserUsecase {
override fun registerUser(command: RegisterUserUsecase.Command): RegisterUserUsecase.Response {
if (!userTokenManagementPort.isExistsToken(command.registerToken)) {
throw UserException.UserPermissionDeniedException("존재하지 않는 가입 토큰입니다.")
}
val userClaims = userTokenConvertPort.resolveRegisterToken(command.registerToken)
if (userAuthManagementPort.isExistsUserAuth(userClaims.socialId, userClaims.socialLoginProvider)) {
throw UserException.UserAlreadyRegisteredException()
}
val registerUser =
User.create(
username = command.realName,
profileImage = userClaims.profileImage,
permission =
UserPermission(
command.servicePermission,
command.privatePermission,
command.marketingPermission,
),
birthday = command.birthday,
email = userClaims.email,
)
val userAuth =
UserAuth.create(
userId = registerUser.id,
socialId = userClaims.socialId,
socialLoginProvider = userClaims.socialLoginProvider,
)
userManagementPort.save(registerUser)
userAuthManagementPort.saveUserAuth(userAuth)
val accessToken = userTokenConvertPort.generateAccessToken(registerUser)
val refreshToken = userTokenConvertPort.generateRefreshToken(registerUser)
userTokenManagementPort.saveUserToken(UserToken.create(token = refreshToken, userId = registerUser.id))
return RegisterUserUsecase.Response(accessToken, refreshToken, registerUser.id.value)
}
override fun delete(command: DeleteUserUsecase.Command) {
val user = userManagementPort.getUserNotNull(DomainId(command.userId))
user.delete(command.reason)
userManagementPort.save(user)
val userAuth = userAuthManagementPort.getNotNull(user.id)
userAuth.delete()
userAuthManagementPort.saveUserAuth(userAuth)
}
override fun executeFor(command: UpdateUserUsecase.Command.Birthday) {
userManagementPort
.getUserNotNull(DomainId(command.userId))
.apply {
this.updateBirthday(command.birthday)
userManagementPort.save(this)
}
}
override fun executeFor(command: UpdateUserUsecase.Command.Onboarding) {
userManagementPort
.getUserNotNull(DomainId(command.userId))
.apply {
this.updateOnboarding()
userManagementPort.save(this)
}
}
}