@@ -7,8 +7,6 @@ import com.backgu.amaker.api.workspace.dto.WorkspaceCreateDto
7
7
import com.backgu.amaker.api.workspace.dto.WorkspaceDto
8
8
import com.backgu.amaker.api.workspace.dto.WorkspaceUserDto
9
9
import com.backgu.amaker.api.workspace.dto.WorkspacesDto
10
- import com.backgu.amaker.api.workspace.event.WorkspaceInvitedEvent
11
- import com.backgu.amaker.api.workspace.event.WorkspaceJoinedEvent
12
10
import com.backgu.amaker.application.chat.service.ChatRoomService
13
11
import com.backgu.amaker.application.chat.service.ChatRoomUserService
14
12
import com.backgu.amaker.application.notification.service.NotificationEventService
@@ -18,6 +16,8 @@ import com.backgu.amaker.application.workspace.WorkspaceUserService
18
16
import com.backgu.amaker.common.exception.BusinessException
19
17
import com.backgu.amaker.common.status.StatusCode
20
18
import com.backgu.amaker.domain.chat.ChatRoom
19
+ import com.backgu.amaker.domain.notifiacation.workspace.WorkspaceInvited
20
+ import com.backgu.amaker.domain.notifiacation.workspace.WorkspaceJoined
21
21
import com.backgu.amaker.domain.user.User
22
22
import com.backgu.amaker.domain.workspace.Workspace
23
23
import org.springframework.stereotype.Service
@@ -41,18 +41,17 @@ class WorkspaceFacadeService(
41
41
val leader: User = userService.getById(userId)
42
42
val workspace: Workspace = workspaceService.save(leader.createWorkspace(workspaceCreateDto.name))
43
43
workspaceUserService.save(workspace.assignLeader(leader))
44
- notificationEventService.publishNotificationEvent(WorkspaceJoinedEvent (leader, workspace ))
44
+ notificationEventService.publishNotificationEvent(WorkspaceJoined .of(workspace, leader ))
45
45
46
46
val invitees = workspaceCreateDto.inviteesEmails.map { userService.getByEmail(it) }
47
47
invitees.forEach {
48
48
if (! leader.isNonInvitee(it)) throw BusinessException (StatusCode .INVALID_WORKSPACE_CREATE )
49
49
workspaceUserService.save(workspace.inviteWorkspace(it))
50
- notificationEventService.publishNotificationEvent(WorkspaceInvitedEvent (it, workspace ))
50
+ notificationEventService.publishNotificationEvent(WorkspaceInvited .of(workspace, it ))
51
51
}
52
52
53
53
val chatRoom: ChatRoom = chatRoomService.save(workspace.createDefaultChatRoom())
54
54
chatRoomUserService.save(chatRoom.addUser(leader))
55
- workspaceService.save(workspace)
56
55
57
56
return WorkspaceDto .of(workspace)
58
57
}
@@ -98,11 +97,33 @@ class WorkspaceFacadeService(
98
97
if (! workspace.isAvailToJoin()) throw BusinessException (StatusCode .INVALID_WORKSPACE_JOIN )
99
98
100
99
val workspaceUser = workspaceUserService.getWorkspaceUser(workspace, user)
101
- notificationEventService.publishNotificationEvent(WorkspaceJoinedEvent (user, workspace))
102
100
if (workspaceUser.isActivated()) throw BusinessException (StatusCode .ALREADY_JOINED_WORKSPACE )
103
101
104
102
// TODO 트랜잭션 종료시점에 이벤트 publish
105
- notificationEventService.publishNotificationEvent(WorkspaceJoinedEvent (user, workspace))
103
+ notificationEventService.publishNotificationEvent(WorkspaceJoined .of(workspace, user))
104
+ workspaceUserService.save(workspaceUser.activate())
105
+
106
+ chatRoomUserService.save(chatRoomService.getDefaultChatRoomByWorkspaceId(workspaceId).addUser(user))
107
+ workspaceService.updateBelonging(workspace.increaseMember())
108
+
109
+ return WorkspaceUserDto .of(user.email, workspaceUser)
110
+ }
111
+
112
+ @Transactional
113
+ fun activateWorkspaceUserWithPessimisticLock (
114
+ userId : String ,
115
+ workspaceId : Long ,
116
+ ): WorkspaceUserDto {
117
+ val user = userService.getById(userId)
118
+
119
+ val workspace = workspaceService.getByIdWithPessimisticLock(workspaceId)
120
+ if (! workspace.isAvailToJoin()) throw BusinessException (StatusCode .INVALID_WORKSPACE_JOIN )
121
+
122
+ val workspaceUser = workspaceUserService.getWorkspaceUser(workspace, user)
123
+ if (workspaceUser.isActivated()) throw BusinessException (StatusCode .ALREADY_JOINED_WORKSPACE )
124
+
125
+ // TODO 트랜잭션 종료시점에 이벤트 publish
126
+ notificationEventService.publishNotificationEvent(WorkspaceJoined .of(workspace, user))
106
127
workspaceUserService.save(workspaceUser.activate())
107
128
108
129
chatRoomUserService.save(chatRoomService.getDefaultChatRoomByWorkspaceId(workspaceId).addUser(user))
@@ -126,7 +147,7 @@ class WorkspaceFacadeService(
126
147
if (workspaceUser.isActivated()) throw BusinessException (StatusCode .ALREADY_JOINED_WORKSPACE )
127
148
128
149
// TODO 트랜잭션 종료시점에 이벤트 publish
129
- notificationEventService.publishNotificationEvent(WorkspaceJoinedEvent (user, workspace ))
150
+ notificationEventService.publishNotificationEvent(WorkspaceJoined .of(workspace, user ))
130
151
workspaceUserService.save(workspaceUser.activate())
131
152
132
153
chatRoomUserService.save(chatRoomService.getDefaultChatRoomByWorkspaceId(workspaceId).addUser(user))
@@ -149,7 +170,7 @@ class WorkspaceFacadeService(
149
170
workspaceUserService.validateUserNotRelatedInWorkspace(invitee, workspace)
150
171
151
172
val workspaceUser = workspaceUserService.save(workspace.inviteWorkspace(invitee))
152
- notificationEventService.publishNotificationEvent(WorkspaceInvitedEvent (invitee, workspace ))
173
+ notificationEventService.publishNotificationEvent(WorkspaceInvited .of(workspace, invitee ))
153
174
154
175
return WorkspaceUserDto .of(invitee.email, workspaceUser)
155
176
}
0 commit comments