Skip to content

Commit 6c0ae04

Browse files
authored
feat: 모집글 본인이 작성한 게시글 조회 기능 추가 (#325)
* feat(recruit-board): 기관 모집글 조회 API 추가 * test(recruit-board): 기관 모집글 조회 API 추가 테스트 * fix(recruit-board): 모집글 응답 DTO 수정 - locationId가 null로 반환되는 오류 해결
1 parent 3b7666f commit 6c0ae04

File tree

3 files changed

+58
-1
lines changed

3 files changed

+58
-1
lines changed

src/main/java/com/somemore/domains/recruitboard/controller/RecruitBoardQueryApiController.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@
99
import com.somemore.domains.recruitboard.dto.response.RecruitBoardWithCenterResponseDto;
1010
import com.somemore.domains.recruitboard.dto.response.RecruitBoardWithLocationResponseDto;
1111
import com.somemore.domains.recruitboard.usecase.RecruitBoardQueryUseCase;
12+
import com.somemore.global.auth.annotation.RoleId;
1213
import com.somemore.global.common.response.ApiResponse;
1314
import io.swagger.v3.oas.annotations.Operation;
1415
import io.swagger.v3.oas.annotations.tags.Tag;
1516
import lombok.RequiredArgsConstructor;
1617
import org.springframework.data.domain.Page;
1718
import org.springframework.data.domain.Pageable;
1819
import org.springframework.data.web.PageableDefault;
20+
import org.springframework.security.access.annotation.Secured;
1921
import org.springframework.web.bind.annotation.GetMapping;
2022
import org.springframework.web.bind.annotation.PathVariable;
2123
import org.springframework.web.bind.annotation.RequestMapping;
@@ -135,6 +137,34 @@ public ApiResponse<Page<RecruitBoardResponseDto>> getRecruitBoardsByCenterId(
135137
.pageable(pageable)
136138
.build();
137139

140+
return ApiResponse.ok(
141+
200,
142+
recruitBoardQueryUseCase.getRecruitBoardsByCenterId(centerId, condition),
143+
"특정 기관 봉사 활동 모집글 조회 성공"
144+
);
145+
}
146+
147+
@Secured("ROLE_CENTER")
148+
@GetMapping("/recruit-boards/me")
149+
@Operation(summary = "기관이 작성한 모집글 조회", description = "기관의 봉사 모집글을 조회합니다.")
150+
public ApiResponse<Page<RecruitBoardResponseDto>> getMyRecruitBoards(
151+
@RoleId UUID centerId,
152+
@PageableDefault(sort = "created_at", direction = DESC) Pageable pageable,
153+
@RequestParam(required = false) String keyword,
154+
@RequestParam(required = false) VolunteerCategory category,
155+
@RequestParam(required = false) String region,
156+
@RequestParam(required = false) Boolean admitted,
157+
@RequestParam(required = false) RecruitStatus status
158+
) {
159+
RecruitBoardSearchCondition condition = RecruitBoardSearchCondition.builder()
160+
.keyword(keyword)
161+
.category(category)
162+
.region(region)
163+
.admitted(admitted)
164+
.status(status)
165+
.pageable(pageable)
166+
.build();
167+
138168
return ApiResponse.ok(
139169
200,
140170
recruitBoardQueryUseCase.getRecruitBoardsByCenterId(centerId, condition),

src/main/java/com/somemore/domains/recruitboard/dto/response/RecruitBoardResponseDto.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ public static RecruitBoardResponseDto from(RecruitBoard board) {
5454
return RecruitBoardResponseDto.builder()
5555
.id(board.getId())
5656
.centerId(board.getCenterId())
57+
.locationId(board.getLocationId())
5758
.createdAt(board.getCreatedAt())
5859
.updatedAt(board.getUpdatedAt())
5960
.title(board.getTitle())

src/test/java/com/somemore/domains/recruitboard/controller/RecruitBoardQueryApiControllerTest.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.somemore.domains.recruitboard.dto.response.RecruitBoardWithLocationResponseDto;
99
import com.somemore.domains.recruitboard.usecase.RecruitBoardQueryUseCase;
1010
import com.somemore.support.ControllerTestSupport;
11+
import com.somemore.support.annotation.MockUser;
1112
import org.junit.jupiter.api.DisplayName;
1213
import org.junit.jupiter.api.Test;
1314
import org.springframework.boot.test.mock.mockito.MockBean;
@@ -141,9 +142,34 @@ void getRecruitBoardsByCenterId() throws Exception {
141142
.accept(MediaType.APPLICATION_JSON))
142143
.andExpect(status().isOk())
143144
.andExpect(jsonPath("$.data").exists())
144-
.andExpect(jsonPath("$.message").value("기관 봉사 활동 모집글 조회 성공"));
145+
.andExpect(jsonPath("$.message").value("특정 기관 봉사 활동 모집글 조회 성공"));
145146

146147
verify(recruitBoardQueryUseCase, times(1)).getRecruitBoardsByCenterId(eq(centerId),
147148
any(RecruitBoardSearchCondition.class));
148149
}
150+
151+
@MockUser(role = "ROLE_CENTER")
152+
@DisplayName("본인(기관)이 작성한 게시글 리스트를 조회할 수 있다.")
153+
@Test
154+
void getMyRecruitBoards() throws Exception {
155+
// given
156+
Page<RecruitBoardResponseDto> page = new PageImpl<>(Collections.emptyList());
157+
158+
given(recruitBoardQueryUseCase.getRecruitBoardsByCenterId(any(),
159+
any(RecruitBoardSearchCondition.class)))
160+
.willReturn(page);
161+
162+
// when
163+
// then
164+
mockMvc.perform(get("/api/recruit-boards/me")
165+
.param("keyword", "volunteer")
166+
.param("category", ADMINISTRATIVE_SUPPORT.name())
167+
.accept(MediaType.APPLICATION_JSON))
168+
.andExpect(status().isOk())
169+
.andExpect(jsonPath("$.data").exists())
170+
.andExpect(jsonPath("$.message").value("기관 봉사 활동 모집글 조회 성공"));
171+
172+
verify(recruitBoardQueryUseCase, times(1))
173+
.getRecruitBoardsByCenterId(any(), any(RecruitBoardSearchCondition.class));
174+
}
149175
}

0 commit comments

Comments
 (0)