Skip to content

Commit 271e146

Browse files
authored
Merge pull request #261 from PawWithU/feat/260-application-complete-api
[Feature] 봉사 완료하기 기능 구현
2 parents b997dac + 9647aee commit 271e146

File tree

5 files changed

+50
-2
lines changed

5 files changed

+50
-2
lines changed

src/main/java/com/pawwithu/connectdog/domain/post/controller/PostController.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,4 +161,16 @@ public ResponseEntity<Void> extendPost(@AuthenticationPrincipal UserDetails logi
161161
postService.extendPost(loginUser.getUsername(), postId, request);
162162
return ResponseEntity.noContent().build();
163163
}
164+
165+
@Operation(summary = "봉사 관리 - 모집중 - 봉사 완료하기", description = "모집중인 봉사를 완료합니다.",
166+
responses = {@ApiResponse(responseCode = "204", description = "봉사 완료 처리 성공")
167+
, @ApiResponse(responseCode = "400"
168+
, description = "M2, 해당 이동봉사 중개를 찾을 수 없습니다. \t\n P2, 해당 공고를 찾을 수 없습니다."
169+
, content = @Content(schema = @Schema(implementation = ErrorResponse.class)))
170+
})
171+
@PatchMapping( "/intermediaries/posts/{postId}/completed")
172+
public ResponseEntity<PostCompleteResponse> completePost(@AuthenticationPrincipal UserDetails loginUser, @PathVariable Long postId) {
173+
PostCompleteResponse response = postService.completePost(loginUser.getUsername(), postId);
174+
return ResponseEntity.ok(response);
175+
}
164176
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.pawwithu.connectdog.domain.post.dto.response;
2+
3+
public record PostCompleteResponse(Boolean isSuccess) {
4+
public static PostCompleteResponse of(Boolean isSuccess) {
5+
return new PostCompleteResponse(isSuccess);
6+
}
7+
}

src/main/java/com/pawwithu/connectdog/domain/post/service/PostService.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -222,4 +222,15 @@ public void extendPost(String email, Long postId, PostExtendRequest request) {
222222
// startDate, endDate, pickUpTime 업데이트 및 공고 상태 모집 마감 -> 모집중 변경
223223
post.extendDate(request.startDate(), request.endDate(), request.isAdjust(), request.pickUpTime());
224224
}
225+
226+
public PostCompleteResponse completePost(String email, Long postId) {
227+
// 이동봉사 중개
228+
Intermediary intermediary = intermediaryRepository.findByEmail(email).orElseThrow(() -> new BadRequestException(INTERMEDIARY_NOT_FOUND));
229+
// 공고
230+
Post post = postRepository.findByIdAndIntermediaryIdAndStatus(postId, intermediary.getId(), PostStatus.RECRUITING).orElseThrow(() -> new BadRequestException(POST_NOT_FOUND));
231+
// 상태 업데이트 (모집중 -> 봉사 완료)
232+
post.updateStatus(PostStatus.COMPLETED);
233+
PostCompleteResponse isSuccess = PostCompleteResponse.of(true);
234+
return isSuccess;
235+
}
225236
}

src/test/java/com/pawwithu/connectdog/domain/intermediary/controller/IntermediaryControllerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ void setUp() {
6767
LocalDate startDate = LocalDate.of(2023, 10, 2);
6868
LocalDate endDate = LocalDate.of(2023, 11, 7);
6969
response.add(new IntermediaryGetPostsResponse(1L, "image1", "잔디1", "서울시 성북구", "서울시 중랑구",
70-
startDate, endDate, "13:00", true, DogSize.MEDIUM.getKey(), true));
70+
startDate, endDate, true, "13:00", DogSize.MEDIUM.getKey(), true));
7171
response.add(new IntermediaryGetPostsResponse(2L, "image1", "잔디2", "서울시 성북구", "서울시 중랑구",
72-
startDate, endDate, "13:00", true, DogSize.MEDIUM.getKey(), true));
72+
startDate, endDate, true, "13:00", DogSize.MEDIUM.getKey(), true));
7373

7474

7575
//when

src/test/java/com/pawwithu/connectdog/domain/post/controller/PostControllerTest.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -265,4 +265,22 @@ void setUp() {
265265
result.andExpect(status().isNoContent());
266266
verify(postService, times(1)).extendPost(anyString(), anyLong(), any());
267267
}
268+
269+
@Test
270+
void 이동봉사_완료하기() throws Exception {
271+
//given
272+
Long postId = 1L;
273+
PostCompleteResponse response = new PostCompleteResponse(true);
274+
275+
//when
276+
given(postService.completePost(anyString(), anyLong())).willReturn(response);
277+
ResultActions result = mockMvc.perform(
278+
patch("/intermediaries/posts/{postId}/completed", postId)
279+
);
280+
281+
//then
282+
result.andExpect(status().isOk());
283+
verify(postService, times(1)).completePost(anyString(), anyLong());
284+
}
285+
268286
}

0 commit comments

Comments
 (0)