Skip to content

Commit cad274a

Browse files
authored
Merge pull request #14 from Dugout-Developers/feat/#13
[FEAT] 직관 신청 수락, 거절 기능 구현
2 parents da57899 + bcff978 commit cad274a

File tree

6 files changed

+122
-4
lines changed

6 files changed

+122
-4
lines changed

src/main/java/com/back/catchmate/domain/enroll/controller/EnrollController.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
44
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
55
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
6+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
67
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
78
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
9+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
810
import com.back.catchmate.domain.enroll.service.EnrollService;
911
import com.back.catchmate.global.jwt.JwtValidation;
1012
import io.swagger.v3.oas.annotations.Operation;
@@ -17,6 +19,7 @@
1719
import org.springframework.data.web.PageableDefault;
1820
import org.springframework.web.bind.annotation.DeleteMapping;
1921
import org.springframework.web.bind.annotation.GetMapping;
22+
import org.springframework.web.bind.annotation.PatchMapping;
2023
import org.springframework.web.bind.annotation.PathVariable;
2124
import org.springframework.web.bind.annotation.PostMapping;
2225
import org.springframework.web.bind.annotation.RequestBody;
@@ -68,4 +71,24 @@ public PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(@JwtValidation Long
6871
@Parameter(hidden = true) Pageable pageable) {
6972
return enrollService.getReceiveEnrollListByBoardId(userId, boardId, pageable);
7073
}
74+
75+
@GetMapping("/new-count")
76+
@Operation(summary = "내가 작성한 게시글에 대한 새로운 직관 신청 갯수 반환 API", description = "내가 작성한 게시글에 대한 새로윤 직관 신청 갯수를 반환하는 API 입니다.")
77+
public NewEnrollCountInfo getNewEnrollmentListCount(@JwtValidation Long userId) {
78+
return enrollService.getNewEnrollListCount(userId);
79+
}
80+
81+
@PatchMapping("/{enrollId}/accept")
82+
@Operation(summary = "받은 직관 신청 수락 API", description = "내가 받은 직관 신청을 수락하는 API 입니다.")
83+
public UpdateEnrollInfo acceptEnroll(@PathVariable Long enrollId,
84+
@JwtValidation Long userId) {
85+
return enrollService.acceptEnroll(enrollId, userId);
86+
}
87+
88+
@PatchMapping("/{enrollId}/reject")
89+
@Operation(summary = "받은 직관 신청 거절 API", description = "내가 받은 직관 신청을 거절하는 API 입니다.")
90+
public UpdateEnrollInfo rejectEnroll(@PathVariable Long enrollId,
91+
@JwtValidation Long userId) {
92+
return enrollService.rejectEnroll(enrollId, userId);
93+
}
7194
}

src/main/java/com/back/catchmate/domain/enroll/converter/EnrollConverter.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@
44
import com.back.catchmate.domain.board.dto.BoardResponse.BoardInfo;
55
import com.back.catchmate.domain.board.entity.Board;
66
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
7+
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
78
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
89
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
910
import com.back.catchmate.domain.enroll.dto.EnrollResponse.EnrollReceiveInfo;
1011
import com.back.catchmate.domain.enroll.dto.EnrollResponse.EnrollRequestInfo;
12+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
1113
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
1214
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
15+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
1316
import com.back.catchmate.domain.enroll.entity.AcceptStatus;
1417
import com.back.catchmate.domain.enroll.entity.Enroll;
1518
import com.back.catchmate.domain.user.converter.UserConverter;
@@ -106,4 +109,17 @@ public EnrollReceiveInfo toEnrollReceiveInfo(Enroll enroll, UserInfo userInfo, B
106109
.boardInfo(boardInfo)
107110
.build();
108111
}
112+
113+
public NewEnrollCountInfo toNewEnrollCountResponse(int enrollListCount) {
114+
return NewEnrollCountInfo.builder()
115+
.newEnrollCount(enrollListCount)
116+
.build();
117+
}
118+
119+
public UpdateEnrollInfo toUpdateEnrollInfo(Enroll enroll, AcceptStatus acceptStatus) {
120+
return UpdateEnrollInfo.builder()
121+
.enrollId(enroll.getId())
122+
.acceptStatus(acceptStatus)
123+
.build();
124+
}
109125
}

src/main/java/com/back/catchmate/domain/enroll/repository/EnrollRepository.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,7 @@ public interface EnrollRepository extends JpaRepository<Enroll, Long> {
1818
Page<Enroll> findEnrollListByBoardWriter(@Param("userId") Long userId, Pageable pageable);
1919

2020
Page<Enroll> findByBoardId(Long boardId, Pageable pageable);
21+
22+
@Query("SELECT COUNT(e) FROM Enroll e JOIN e.board b WHERE e.isNew = true AND b.user.id = :userId")
23+
int countNewEnrollListByUserId(@Param("userId") Long userId);
2124
}

src/main/java/com/back/catchmate/domain/enroll/service/EnrollService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package com.back.catchmate.domain.enroll.service;
22

33
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
4+
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
45
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
56
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CreateEnrollInfo;
7+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.NewEnrollCountInfo;
68
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollReceiveInfo;
79
import com.back.catchmate.domain.enroll.dto.EnrollResponse.PagedEnrollRequestInfo;
10+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.UpdateEnrollInfo;
811
import org.springframework.data.domain.Pageable;
912

13+
import java.io.IOException;
14+
1015
public interface EnrollService {
1116
CreateEnrollInfo requestEnroll(CreateEnrollRequest request, Long boardId, Long userId);
1217

@@ -18,4 +23,9 @@ public interface EnrollService {
1823

1924
PagedEnrollReceiveInfo getReceiveEnrollListByBoardId(Long userId, Long boardId, Pageable pageable);
2025

26+
NewEnrollCountInfo getNewEnrollListCount(Long userId);
27+
28+
UpdateEnrollInfo acceptEnroll(Long enrollId, Long userId);
29+
30+
UpdateEnrollInfo rejectEnroll(Long enrollId, Long userId);
2131
}

src/main/java/com/back/catchmate/domain/enroll/service/EnrollServiceImpl.java

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@
55
import com.back.catchmate.domain.enroll.converter.EnrollConverter;
66
import com.back.catchmate.domain.enroll.dto.EnrollRequest.CreateEnrollRequest;
77
import com.back.catchmate.domain.enroll.dto.EnrollResponse;
8+
import com.back.catchmate.domain.enroll.dto.EnrollResponse.CancelEnrollInfo;
89
import 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;
914
import com.back.catchmate.domain.enroll.entity.Enroll;
1015
import com.back.catchmate.domain.enroll.repository.EnrollRepository;
1116
import com.back.catchmate.domain.user.entity.User;
@@ -16,6 +21,7 @@
1621
import org.springframework.data.domain.Page;
1722
import org.springframework.data.domain.Pageable;
1823
import 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
}

src/main/java/com/back/catchmate/domain/user/entity/User.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,4 +141,8 @@ public void updateFcmToken(String fcmToken) {
141141
public void deleteFcmToken() {
142142
this.fcmToken = null;
143143
}
144+
145+
public boolean isDifferentUserFrom(User boardWriter) {
146+
return !this.equals(boardWriter);
147+
}
144148
}

0 commit comments

Comments
 (0)