Skip to content

Commit fb7cc32

Browse files
authored
feat: 임시 저장한 지원서 수 조회 기능 추가
1 parent 87cbaae commit fb7cc32

5 files changed

Lines changed: 64 additions & 1 deletion

File tree

src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyApiSpec.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,21 @@
22

33
import io.swagger.v3.oas.annotations.Operation;
44
import io.swagger.v3.oas.annotations.tags.Tag;
5+
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
56
import org.ject.support.domain.apply.dto.TempApplyDetailResponse;
67
import org.springframework.web.bind.annotation.PathVariable;
78

8-
@Tag(name = "Admin", description = "임시 저장된 지원서 관리")
9+
@Tag(name = "Temporary Apply", description = "임시 저장된 지원서 관리")
910
public interface AdminTempApplyApiSpec {
1011

1112
@Operation(
1213
summary = "임시 저장된 지원서 상세 조회",
1314
description = "관리자가 지원자의 임시 저장된 지원서의 정보를 조회합니다."
1415
)
1516
TempApplyDetailResponse getTempApplyDetail(@PathVariable("tempApplyId") Long tempApplyId);
17+
18+
@Operation(
19+
summary = "임시 저장한 지원서 수 조회",
20+
description = "임시 저장한 지원서 총 개수를 조회합니다.")
21+
TempSavedApplyCountResponse getTempSavedApplyCount();
1622
}

src/main/java/org/ject/support/domain/admin/controller/AdminTempApplyController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.ject.support.domain.admin.controller;
22

33
import lombok.RequiredArgsConstructor;
4+
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
45
import org.ject.support.domain.admin.service.AdminTempApplyService;
56
import org.ject.support.domain.apply.dto.TempApplyDetailResponse;
67
import org.springframework.security.access.prepost.PreAuthorize;
@@ -21,4 +22,10 @@ public class AdminTempApplyController implements AdminTempApplyApiSpec {
2122
public TempApplyDetailResponse getTempApplyDetail(@PathVariable("tempApplyId") Long tempApplyId) {
2223
return adminTempApplyService.getTempApplyDetail(tempApplyId);
2324
}
25+
26+
@GetMapping("/count")
27+
@PreAuthorize("hasRole('ROLE_ADMIN')")
28+
public TempSavedApplyCountResponse getTempSavedApplyCount() {
29+
return adminTempApplyService.getTempSavedApplyCount();
30+
}
2431
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.ject.support.domain.admin.dto;
2+
3+
public record TempSavedApplyCountResponse(
4+
Long count
5+
) {
6+
public TempSavedApplyCountResponse {
7+
if (count == null) {
8+
count = 0L;
9+
}
10+
}
11+
}

src/main/java/org/ject/support/domain/admin/service/AdminTempApplyService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import lombok.RequiredArgsConstructor;
44
import org.ject.support.common.util.String2MapSerializer;
5+
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
56
import org.ject.support.domain.apply.domain.ApplicationForm;
67
import org.ject.support.domain.apply.domain.Apply;
78
import org.ject.support.domain.apply.dto.ApplyPortfolioDto;
@@ -34,4 +35,9 @@ public TempApplyDetailResponse getTempApplyDetail(Long tempApplyId) {
3435
.map(ApplyPortfolioDto::from)
3536
.toList());
3637
}
38+
39+
public TempSavedApplyCountResponse getTempSavedApplyCount() {
40+
Long count = applyRepository.countByStatus(Apply.Status.TEMP_SAVED);
41+
return new TempSavedApplyCountResponse(count);
42+
}
3743
}

src/test/java/org/ject/support/domain/admin/service/AdminTempApplyServiceTest.java

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import org.ject.support.base.UnitTestSupport;
44
import org.ject.support.common.util.String2MapSerializer;
5+
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
56
import org.ject.support.domain.apply.domain.ApplicationForm;
67
import org.ject.support.domain.apply.domain.Apply;
78
import org.ject.support.domain.apply.dto.TempApplyDetailResponse;
@@ -74,4 +75,36 @@ class AdminTempApplyServiceTest extends UnitTestSupport {
7475
verify(applyRepository).findByIdAndStatusWithMember(tempApplyId, Apply.Status.TEMP_SAVED);
7576
assertThat(result.applyId()).isEqualTo(tempApplyId);
7677
}
78+
79+
@Test
80+
void 임시_저장된_지원서의_총_개수를_조회한다() {
81+
// given
82+
Apply.Status targetStatus = Apply.Status.TEMP_SAVED;
83+
Long tempSavedCount = 5L;
84+
given(applyRepository.countByStatus(targetStatus))
85+
.willReturn(tempSavedCount);
86+
87+
// when
88+
TempSavedApplyCountResponse result = adminTempApplyService.getTempSavedApplyCount();
89+
90+
// then
91+
verify(applyRepository).countByStatus(targetStatus);
92+
assertThat(result).isEqualTo(new TempSavedApplyCountResponse(tempSavedCount));
93+
}
94+
95+
@Test
96+
void 임시_저장된_지원서의_총_개수가_0개일_경우_0을_조회한다() {
97+
// given
98+
Apply.Status targetStatus = Apply.Status.TEMP_SAVED;
99+
Long tempSavedCount = 0L;
100+
given(applyRepository.countByStatus(targetStatus))
101+
.willReturn(tempSavedCount);
102+
103+
// when
104+
TempSavedApplyCountResponse result = adminTempApplyService.getTempSavedApplyCount();
105+
106+
// then
107+
verify(applyRepository).countByStatus(targetStatus);
108+
assertThat(result).isEqualTo(new TempSavedApplyCountResponse(tempSavedCount));
109+
}
77110
}

0 commit comments

Comments
 (0)