Skip to content

Commit 02e53ac

Browse files
authored
feat: 지원상태 확인 API 수정 (#447)
1 parent f9ae231 commit 02e53ac

6 files changed

Lines changed: 44 additions & 13 deletions

File tree

src/main/java/org/ject/support/domain/apply/controller/ApplyApiSpec.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,13 @@ void submitApplication(@AuthPrincipal Long memberId,
4242
@Operation(
4343
summary = "지원 상태 확인",
4444
description = """
45-
지원자의 지원서 제출 여부를 확인합니다.
45+
지원자의 특정 공고에 대한 지원서 제출 여부를 확인합니다.
4646
- JOINED: 프로필을 저장한 경우
4747
- TEMP_SAVED: 작성 중인 지원서가 있는 경우
4848
- SUBMITTED: 이미 지원서를 제출한 경우
4949
""")
50-
ApplyStatusResponse checkApplyStatus(@AuthPrincipal Long memberId);
50+
ApplyStatusResponse checkApplyStatus(@AuthPrincipal Long memberId,
51+
@RequestParam Long recruitId);
5152

5253
@Operation(
5354
summary = "프로필 작성(저장)",

src/main/java/org/ject/support/domain/apply/controller/ApplyController.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ public void submitApplication(@AuthPrincipal Long memberId,
5959
@Override
6060
@GetMapping("/status")
6161
@PreAuthorize("hasRole('ROLE_APPLY')")
62-
public ApplyStatusResponse checkApplyStatus(@AuthPrincipal Long memberId) {
63-
return applyUsecase.checkApplyStatus(memberId);
62+
public ApplyStatusResponse checkApplyStatus(@AuthPrincipal Long memberId,
63+
@RequestParam Long recruitId) {
64+
return applyUsecase.checkApplyStatus(memberId, recruitId);
6465
}
6566

6667
@Override

src/main/java/org/ject/support/domain/apply/repository/ApplyRepository.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ public interface ApplyRepository extends JpaRepository<Apply, Long>, ApplyQueryR
2020
@Query("select a from Apply a join a.recruit r where a.member.id = :memberId and r.startDate <= :now and r.endDate >= :now")
2121
Optional<Apply> findByMemberIdInActiveRecruit(@Param("memberId") Long memberId, @Param("now") LocalDateTime now);
2222

23+
@Query("select a from Apply a join a.recruit r where a.member.id = :memberId and r.id = :recruitId and r.startDate <= :now and r.endDate >= :now")
24+
Optional<Apply> findByMemberIdAndRecruitIdInActiveRecruit(@Param("memberId") Long memberId,
25+
@Param("recruitId") Long recruitId,
26+
@Param("now") LocalDateTime now);
27+
2328
@Query("select count(a) > 0 from Apply a join a.recruit r where a.member.id = :memberId and r.startDate <= :now and r.endDate >= :now")
2429
boolean existsByMemberIdInActiveRecruit(@Param("memberId") Long memberId, @Param("now") LocalDateTime now);
2530

src/main/java/org/ject/support/domain/apply/service/ApplyService.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,11 +170,11 @@ public void submitApplication(Long memberId,
170170

171171
@Override
172172
@PeriodAccessible(permitAllJob = true)
173-
public ApplyStatusResponse checkApplyStatus(Long memberId) {
173+
public ApplyStatusResponse checkApplyStatus(Long memberId, Long recruitId) {
174174
memberRepository.findById(memberId)
175175
.orElseThrow(() -> new MemberException(MemberErrorCode.NOT_FOUND_MEMBER));
176176

177-
return applyRepository.findByMemberIdInActiveRecruit(memberId, LocalDateTime.now())
177+
return applyRepository.findByMemberIdAndRecruitIdInActiveRecruit(memberId, recruitId, LocalDateTime.now())
178178
.map(ApplyStatusResponse::of)
179179
.orElseThrow(() -> new ApplyException(NOT_FOUND_APPLY));
180180
}

src/main/java/org/ject/support/domain/apply/service/ApplyUsecase.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ void submitApplication(Long memberId,
2424
Map<String, String> answers,
2525
List<ApplyPortfolioDto> portfolios);
2626

27-
ApplyStatusResponse checkApplyStatus(Long memberId);
27+
ApplyStatusResponse checkApplyStatus(Long memberId, Long recruitId);
2828

2929
void saveProfile(Long memberId, ApplyProfileRequest request);
3030
}

src/test/java/org/ject/support/domain/apply/service/ApplyServiceTest.java

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -198,18 +198,19 @@ class ApplyServiceTest extends UnitTestSupport {
198198
@Test
199199
void 지원상태_조회_시_프로필작성을_하지_않았을_경우_예외발생() {
200200
// given
201+
Long recruitId = 1L;
201202
Member member = Member.builder()
202203
.id(1L)
203204
.name("지원자명")
204205
.phoneNumber("01012345678")
205206
.build();
206207
given(memberRepository.findById(member.getId()))
207208
.willReturn(Optional.of(member));
208-
given(applyRepository.findByMemberIdInActiveRecruit(eq(member.getId()), any()))
209+
given(applyRepository.findByMemberIdAndRecruitIdInActiveRecruit(eq(member.getId()), eq(recruitId), any()))
209210
.willReturn(Optional.empty());
210211

211212
// expected
212-
assertThatThrownBy(() -> applyService.checkApplyStatus(member.getId()))
213+
assertThatThrownBy(() -> applyService.checkApplyStatus(member.getId(), recruitId))
213214
.isInstanceOf(ApplyException.class)
214215
.extracting("errorCode")
215216
.isEqualTo(ApplyErrorCode.NOT_FOUND_APPLY);
@@ -218,14 +219,15 @@ class ApplyServiceTest extends UnitTestSupport {
218219
@Test
219220
void 작성_중인_지원서가_있는_경우_TEMP_SAVED_반환() {
220221
// given
222+
Long recruitId = 1L;
221223
Member member = Member.builder()
222224
.id(1L)
223225
.name("지원자명")
224226
.phoneNumber("01012345678")
225227
.build();
226228
given(memberRepository.findById(member.getId()))
227229
.willReturn(Optional.of(member));
228-
given(applyRepository.findByMemberIdInActiveRecruit(eq(member.getId()), any()))
230+
given(applyRepository.findByMemberIdAndRecruitIdInActiveRecruit(eq(member.getId()), eq(recruitId), any()))
229231
.willReturn(Optional.of(
230232
Apply.builder()
231233
.id(1L)
@@ -234,7 +236,7 @@ class ApplyServiceTest extends UnitTestSupport {
234236
));
235237

236238
// when
237-
ApplyStatusResponse result = applyService.checkApplyStatus(member.getId());
239+
ApplyStatusResponse result = applyService.checkApplyStatus(member.getId(), recruitId);
238240

239241
// then
240242
assertThat(result.status()).isEqualTo(TEMP_SAVED);
@@ -243,14 +245,15 @@ class ApplyServiceTest extends UnitTestSupport {
243245
@Test
244246
void 지원서를_제출한_지원자에_대한_제출_상태_확인_시_SUBMITTED_반환() {
245247
// given
248+
Long recruitId = 1L;
246249
Member member = Member.builder()
247250
.id(1L)
248251
.name("지원자명")
249252
.phoneNumber("01012345678")
250253
.build();
251254
given(memberRepository.findById(member.getId()))
252255
.willReturn(Optional.of(member));
253-
given(applyRepository.findByMemberIdInActiveRecruit(eq(member.getId()), any()))
256+
given(applyRepository.findByMemberIdAndRecruitIdInActiveRecruit(eq(member.getId()), eq(recruitId), any()))
254257
.willReturn(Optional.of(
255258
Apply.builder()
256259
.id(1L)
@@ -259,12 +262,33 @@ class ApplyServiceTest extends UnitTestSupport {
259262
));
260263

261264
// when
262-
ApplyStatusResponse result = applyService.checkApplyStatus(member.getId());
265+
ApplyStatusResponse result = applyService.checkApplyStatus(member.getId(), recruitId);
263266

264267
// then
265268
assertThat(result.status()).isEqualTo(SUBMITTED);
266269
}
267270

271+
@Test
272+
void 동일_회원이라도_다른_공고ID로_조회하면_지원상태_조회_실패() {
273+
// given
274+
Long requestedRecruitId = 2L;
275+
Member member = Member.builder()
276+
.id(1L)
277+
.name("지원자명")
278+
.phoneNumber("01012345678")
279+
.build();
280+
given(memberRepository.findById(member.getId()))
281+
.willReturn(Optional.of(member));
282+
given(applyRepository.findByMemberIdAndRecruitIdInActiveRecruit(eq(member.getId()), eq(requestedRecruitId), any()))
283+
.willReturn(Optional.empty());
284+
285+
// expected
286+
assertThatThrownBy(() -> applyService.checkApplyStatus(member.getId(), requestedRecruitId))
287+
.isInstanceOf(ApplyException.class)
288+
.extracting("errorCode")
289+
.isEqualTo(ApplyErrorCode.NOT_FOUND_APPLY);
290+
}
291+
268292
@Test
269293
void 지원서_최초_임시저장_성공() {
270294
// given

0 commit comments

Comments
 (0)