55import com .back .catchmate .domain .enroll .converter .EnrollConverter ;
66import com .back .catchmate .domain .enroll .dto .EnrollRequest .CreateEnrollRequest ;
77import com .back .catchmate .domain .enroll .dto .EnrollResponse ;
8+ import com .back .catchmate .domain .enroll .dto .EnrollResponse .CancelEnrollInfo ;
89import com .back .catchmate .domain .enroll .dto .EnrollResponse .CreateEnrollInfo ;
10+ import com .back .catchmate .domain .enroll .dto .EnrollResponse .PagedEnrollReceiveInfo ;
11+ import com .back .catchmate .domain .enroll .dto .EnrollResponse .PagedEnrollRequestInfo ;
12+ import com .back .catchmate .domain .enroll .dto .EnrollResponse .UpdateEnrollInfo ;
13+ import com .back .catchmate .domain .enroll .entity .AcceptStatus ;
914import com .back .catchmate .domain .enroll .entity .Enroll ;
1015import com .back .catchmate .domain .enroll .repository .EnrollRepository ;
1116import com .back .catchmate .domain .user .entity .User ;
1621import org .springframework .data .domain .Page ;
1722import org .springframework .data .domain .Pageable ;
1823import org .springframework .stereotype .Service ;
24+ import org .springframework .transaction .annotation .Transactional ;
1925
2026@ Service
2127@ RequiredArgsConstructor
@@ -26,6 +32,7 @@ public class EnrollServiceImpl implements EnrollService {
2632 private final EnrollConverter enrollConverter ;
2733
2834 @ Override
35+ @ Transactional
2936 public CreateEnrollInfo requestEnroll (CreateEnrollRequest request , Long boardId , Long userId ) {
3037 User user = userRepository .findById (userId )
3138 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
@@ -48,7 +55,8 @@ public CreateEnrollInfo requestEnroll(CreateEnrollRequest request, Long boardId,
4855 }
4956
5057 @ Override
51- public EnrollResponse .CancelEnrollInfo cancelEnroll (Long enrollId , Long userId ) {
58+ @ Transactional
59+ public CancelEnrollInfo cancelEnroll (Long enrollId , Long userId ) {
5260 User user = userRepository .findById (userId )
5361 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
5462
@@ -65,7 +73,8 @@ public EnrollResponse.CancelEnrollInfo cancelEnroll(Long enrollId, Long userId)
6573 }
6674
6775 @ Override
68- public EnrollResponse .PagedEnrollRequestInfo getRequestEnrollList (Long userId , Pageable pageable ) {
76+ @ Transactional (readOnly = true )
77+ public PagedEnrollRequestInfo getRequestEnrollList (Long userId , Pageable pageable ) {
6978 User user = userRepository .findById (userId )
7079 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
7180
@@ -74,7 +83,8 @@ public EnrollResponse.PagedEnrollRequestInfo getRequestEnrollList(Long userId, P
7483 }
7584
7685 @ Override
77- public EnrollResponse .PagedEnrollReceiveInfo getReceiveEnrollList (Long userId , Pageable pageable ) {
86+ @ Transactional (readOnly = true )
87+ public PagedEnrollReceiveInfo getReceiveEnrollList (Long userId , Pageable pageable ) {
7888 User user = userRepository .findById (userId )
7989 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
8090
@@ -83,7 +93,8 @@ public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollList(Long userId, P
8393 }
8494
8595 @ Override
86- public EnrollResponse .PagedEnrollReceiveInfo getReceiveEnrollListByBoardId (Long userId , Long boardId , Pageable pageable ) {
96+ @ Transactional (readOnly = true )
97+ public PagedEnrollReceiveInfo getReceiveEnrollListByBoardId (Long userId , Long boardId , Pageable pageable ) {
8798 User user = userRepository .findById (userId )
8899 .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
89100
@@ -99,4 +110,55 @@ public EnrollResponse.PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long
99110 Page <Enroll > enrollList = enrollRepository .findByBoardId (boardId , pageable );
100111 return enrollConverter .toPagedEnrollReceiveInfo (enrollList );
101112 }
113+
114+ @ Override
115+ @ Transactional (readOnly = true )
116+ public EnrollResponse .NewEnrollCountInfo getNewEnrollListCount (Long userId ) {
117+ int enrollListCount = enrollRepository .countNewEnrollListByUserId (userId );
118+ return enrollConverter .toNewEnrollCountResponse (enrollListCount );
119+ }
120+
121+ @ Override
122+ @ Transactional
123+ public UpdateEnrollInfo acceptEnroll (Long enrollId , Long userId ) {
124+ User loginUser = userRepository .findById (userId )
125+ .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
126+
127+ Enroll enroll = enrollRepository .findById (enrollId )
128+ .orElseThrow (() -> new BaseException (ErrorCode .ENROLL_NOT_FOUND ));
129+
130+ User boardWriter = enroll .getBoard ().getUser ();
131+ User enrollApplicant = userRepository .findById (enroll .getUser ().getId ())
132+ .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
133+
134+ // 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
135+ if (loginUser .isDifferentUserFrom (boardWriter )) {
136+ throw new BaseException (ErrorCode .ENROLL_ACCEPT_INVALID );
137+ }
138+
139+ enroll .setAcceptStatus (AcceptStatus .ACCEPTED );
140+ return enrollConverter .toUpdateEnrollInfo (enroll , AcceptStatus .ACCEPTED );
141+ }
142+
143+ @ Override
144+ @ Transactional
145+ public UpdateEnrollInfo rejectEnroll (Long enrollId , Long userId ) {
146+ User loginUser = userRepository .findById (userId )
147+ .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
148+
149+ Enroll enroll = enrollRepository .findById (enrollId )
150+ .orElseThrow (() -> new BaseException (ErrorCode .ENROLL_NOT_FOUND ));
151+
152+ User boardWriter = enroll .getBoard ().getUser ();
153+ User enrollApplicant = userRepository .findById (enroll .getUser ().getId ())
154+ .orElseThrow (() -> new BaseException (ErrorCode .USER_NOT_FOUND ));
155+
156+ // 게시글 작성자와 로그인한 사용자가 다를 경우 예외 발생
157+ if (loginUser .isDifferentUserFrom (boardWriter )) {
158+ throw new BaseException (ErrorCode .ENROLL_REJECT_INVALID );
159+ }
160+
161+ enroll .setAcceptStatus (AcceptStatus .REJECTED );
162+ return enrollConverter .toUpdateEnrollInfo (enroll , AcceptStatus .REJECTED );
163+ }
102164}
0 commit comments