@@ -163,39 +163,44 @@ public UpdateEnrollInfo acceptEnroll(Long enrollId, Long userId) throws IOExcept
163163 User loginUser = userRepository .findById (userId )
164164 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
165165
166- Enroll enroll = enrollRepository .findById (enrollId )
166+ Enroll enroll = enrollRepository .findByIdWithLock (enrollId )
167167 .orElseThrow (() -> new BaseException (ErrorCode .ENROLL_NOT_FOUND ));
168168
169169 User boardWriter = enroll .getBoard ().getUser ();
170170 User enrollApplicant = userRepository .findById (enroll .getUser ().getId ())
171171 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
172172
173- Board board = enroll .getBoard ();
173+ Board board = boardRepository .findByIdWithLock (enroll .getBoard ().getId ())
174+ .orElseThrow (() -> new BaseException (ErrorCode .BOARD_NOT_FOUND ));
175+
174176 if (board .canIncrementCurrentPerson ()) {
175177 board .incrementCurrentPerson ();
178+ } else {
179+ throw new BaseException (ErrorCode .FULL_PERSON );
176180 }
177181
178- // 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
179182 if (loginUser .isDifferentUserFrom (boardWriter )) {
180183 throw new BaseException (ErrorCode .ENROLL_ACCEPT_INVALID );
181184 }
182185
186+ int updatedRows = enrollRepository .updateEnrollStatus (enrollId , AcceptStatus .ACCEPTED );
187+ if (updatedRows == 0 ) {
188+ throw new BaseException (ErrorCode .ENROLL_ALREADY_ACCEPTED );
189+ }
190+
183191 enterChatRoom (enrollApplicant , board );
184192
185193 String title = ENROLLMENT_ACCEPT_TITLE ;
186194 String body = ENROLLMENT_ACCEPT_BODY ;
187195
188- // 직관 신청자에게 수락 푸시 알림 메세지 전송
189196 fcmService .sendMessageByToken (enrollApplicant .getFcmToken (), title , body , enroll .getBoard ().getId (), AcceptStatus .ACCEPTED );
190- // 데이터베이스에 저장
191197 notificationService .createNotification (title , body , boardWriter .getProfileImageUrl (), enroll .getBoard ().getId (), enrollApplicant .getId (), AcceptStatus .ACCEPTED );
192198
193- enroll .respondToEnroll (AcceptStatus .ACCEPTED );
194199 return enrollConverter .toUpdateEnrollInfo (enroll , AcceptStatus .ACCEPTED );
195200 }
196201
197202 private void enterChatRoom (User user , Board board ) {
198- ChatRoom chatRoom = chatRoomRepository .findByBoardIdAndDeletedAtIsNull (board .getId ())
203+ ChatRoom chatRoom = chatRoomRepository .findByBoardIdWithLock (board .getId ())
199204 .orElseThrow (() -> new BaseException (ErrorCode .CHATROOM_NOT_FOUND ));
200205
201206 chatRoom .incrementParticipantCount ();
@@ -213,30 +218,28 @@ public UpdateEnrollInfo rejectEnroll(Long enrollId, Long userId) throws IOExcept
213218 User loginUser = userRepository .findById (userId )
214219 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
215220
216- Enroll enroll = enrollRepository .findById (enrollId )
221+ Enroll enroll = enrollRepository .findByIdWithLock (enrollId )
217222 .orElseThrow (() -> new BaseException (ErrorCode .ENROLL_NOT_FOUND ));
218223
219224 User boardWriter = enroll .getBoard ().getUser ();
220225 User enrollApplicant = userRepository .findById (enroll .getUser ().getId ())
221226 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
222227
223- // 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
224228 if (loginUser .isDifferentUserFrom (boardWriter )) {
225229 throw new BaseException (ErrorCode .ENROLL_REJECT_INVALID );
226230 }
227231
228232 String title = ENROLLMENT_REJECT_TITLE ;
229233 String body = ENROLLMENT_REJECT_BODY ;
230234
231- // 직관 신청자에게 거절 푸시 알림 메세지 전송
232235 fcmService .sendMessageByToken (enrollApplicant .getFcmToken (), title , body , enroll .getBoard ().getId (), AcceptStatus .REJECTED );
233- // 데이터베이스에 저장
234236 notificationService .createNotification (title , body , boardWriter .getProfileImageUrl (), enroll .getBoard ().getId (), enrollApplicant .getId (), AcceptStatus .REJECTED );
235237
236238 enroll .respondToEnroll (AcceptStatus .REJECTED );
237239 return enrollConverter .toUpdateEnrollInfo (enroll , AcceptStatus .REJECTED );
238240 }
239241
242+
240243 @ Override
241244 public EnrollDescriptionInfo getEnrollDescriptionById (Long boardId , Long userId ) {
242245 User user = userRepository .findById (userId )
0 commit comments