Skip to content

Commit 4441bc6

Browse files
authored
[FUNC_APL_MGT_01] 제출 완료된 지원서 목록 조회하기 #449 (#452)
* refactor: admin 패키지로 ApplyQueryRepository 이관 - ApplyQueryRepository, ApplyQueryRepositoryImpl를 admin/repository 패키지로 이관 - AdminApplyQueryRepository, AdminApplyQueryRepositoryImpl로 이름 변경 - ApplyRepository에서 ApplyQueryRepository extends 제거 - SubmittedApplyService, AdminTempApplyService가 AdminApplyQueryRepository를 직접 주입받도록 변경 - ApplyQueryRepositoryTest를 AdminApplyQueryRepositoryTest로 이관 * feat: 제출 완료된 지원서 목록 조회 기능 구현 (#449) - AdminApplyQueryRepositoryTest에 AdminApplyQueryRepositoryImpl @import 추가 - JobFamily, semesterId 필터링 및 createdAt 내림차순 정렬 지원 - 삭제된 회원의 지원서 제외 처리 - 페이지네이션 지원 (기본 size=15) * refactor: admin 패키지를 domain 레이어와 동일 레벨로 이관 - org.ject.support.domain.admin → org.ject.support.admin 으로 패키지 이동 - component, controller, dto, exception, repository, service 전체 이관 - 테스트 파일도 동일하게 이관 - 외부에서 참조하는 import도 일괄 수정 - 추후 admin 모듈 분리를 용이하게 하기 위한 패키지 구조 개선 * fix: 제출 지원서 목록 조회 페이지 크기 10, 등록일 내림차순 정렬 기본값 적용 - @PageableDefault size=15 → 10 (이슈 #449 요구사항: 한 페이지 10개) - sort="createdAt", direction=DESC 기본 정렬 추가 * feat: Recruit에 모집 단위(RecruitType) 추가 및 지원서 목록 조회 필터 반영 - RecruitType enum 추가 (REGULAR, REGULAR_ADDITIONAL, EXISTING_MEMBER, SEPARATE) - Recruit 엔티티에 recruitType 필드 추가 (nullable) - V20 Flyway 마이그레이션: recruit 테이블에 recruit_type 컬럼 추가 - AdminApplyQueryRepository.findAppliesByStatus()에 recruitType 필터 파라미터 추가 - SubmittedApplyService, AdminTempApplyService 및 컨트롤러·ApiSpec 전파 - 관련 테스트 파일 호출부 일괄 수정 * fix: RecruitType enum 값 명칭 변경 및 기존 데이터 REGULAR 초기화 - REGULAR_ADDITIONAL → REGULAR_WAITLIST - EXISTING_MEMBER → BACKFILL - SEPARATE → MANUAL - Recruit.recruitType 빌더 기본값 REGULAR 설정, nullable=false - V20 마이그레이션: 기존 레코드 REGULAR 초기화 후 NOT NULL 적용 * refactor: admin 패키지를 apply/member/auth 기능별 하위 구조로 분리 - admin/apply: 지원서 관리 (controller, dto, repository, service) - admin/member: 회원 관리 (component, controller, dto, service) - admin/auth: 인증 (controller, dto, service) - admin/exception: 공통 예외 (기존 유지) - 패키지 선언 및 import 일괄 수정 * refactor: SubmittedApplyApiSpec 제거 및 SubmittedApplyController로 통합 * refactor: MemberQueryRepository에서 admin DTO 의존성 제거 - 도메인 레이어 전용 MemberProjection DTO 생성 - MemberQueryRepository/Impl이 MemberProjection을 반환하도록 변경 - MemberResponse에 from(MemberProjection) 팩터리 메서드 추가 - MemberManagementService에서 MemberProjection → MemberResponse 변환 로직 적용 - 관련 테스트 MemberProjection 기반으로 수정 * feat: 제출 지원서 조회 응답에 요건에 맞게 필드 추가 - 지원자 신분(careerDetails), 모집 단위(recruitType) 응답에 추가 * test: RecruitType 필터링 지원 조회 테스트 추가 - AdminApplyQueryRepositoryTest 필터링 시나리오 보강 - AdminTempApplyServiceTest 임시저장 지원서 필터링 시나리오 보강 * refactor: 임시저장 지원서(Temp Apply) 관련 로직 초기 버전으로 롤백 * fix: 임시 저장된 지원서 목록 페이징 일관성 유지 (size=10, createdAt 역순) * test: MemberQueryRepositoryTest의 semesterName 검증식을 MemberProjection 반환 형식에 맞게 수정 (CI 실패 해결) * feat: 제출된 지원서 조회 응답 필드 수정 (기획 요구사항 반영) - 노출 항목 최적화 (이름, 연락처, 이메일, 포지션, 지원자 신분, 모집 단위, 활동 상태, 비고) - 상세 이력(ApplicationForm) 응답에서 제외 * feat: 지원서 비고(note) 필드 추가 및 응답 반영 - Apply 엔티티에 note 추가 (Builder.Default 포함) - V21__add_note_to_apply 플라이웨이 마이그레이션 파일 추가 - SubmittedApplyResponse 응답에서 note 필드 매핑 및 불필요 항목 제거
1 parent 02e53ac commit 4441bc6

59 files changed

Lines changed: 403 additions & 344 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

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

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
package org.ject.support.domain.admin.controller;
1+
package org.ject.support.admin.apply.controller;
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.TempApplyDetailResponse;
6-
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
7-
import org.ject.support.domain.admin.dto.TempSavedApplyResponse;
5+
import org.ject.support.admin.apply.dto.TempApplyDetailResponse;
6+
import org.ject.support.admin.apply.dto.TempSavedApplyCountResponse;
7+
import org.ject.support.admin.apply.dto.TempSavedApplyResponse;
88
import org.ject.support.domain.member.JobFamily;
99
import org.springframework.data.domain.Page;
1010
import org.springframework.data.domain.Pageable;
11+
import org.springframework.data.domain.Sort;
1112
import org.springframework.data.web.PageableDefault;
1213
import org.springframework.web.bind.annotation.PathVariable;
1314
import org.springframework.web.bind.annotation.RequestParam;
@@ -38,6 +39,6 @@ public interface AdminTempApplyApiSpec {
3839
Page<TempSavedApplyResponse> getTempApplies(
3940
@RequestParam(required = false) JobFamily jobFamily,
4041
@RequestParam(required = false) final Long semesterId,
41-
@PageableDefault(size = 15) final Pageable pageable
42+
@PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) final Pageable pageable
4243
);
4344
}

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

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

33
import lombok.RequiredArgsConstructor;
4-
import org.ject.support.domain.admin.dto.TempApplyDetailResponse;
5-
import org.ject.support.domain.admin.dto.TempSavedApplyCountResponse;
6-
import org.ject.support.domain.admin.dto.TempSavedApplyResponse;
7-
import org.ject.support.domain.admin.service.AdminTempApplyService;
4+
import org.ject.support.admin.apply.dto.TempApplyDetailResponse;
5+
import org.ject.support.admin.apply.dto.TempSavedApplyCountResponse;
6+
import org.ject.support.admin.apply.dto.TempSavedApplyResponse;
7+
import org.ject.support.admin.apply.service.AdminTempApplyService;
88
import org.ject.support.domain.member.JobFamily;
99
import org.springframework.data.domain.Page;
1010
import org.springframework.data.domain.Pageable;
11+
import org.springframework.data.domain.Sort;
1112
import org.springframework.data.web.PageableDefault;
1213
import org.springframework.web.bind.annotation.DeleteMapping;
1314
import org.springframework.web.bind.annotation.GetMapping;
@@ -41,7 +42,7 @@ public void deleteTempApply(@PathVariable final Long tempApplyId) {
4142
@GetMapping()
4243
public Page<TempSavedApplyResponse> getTempApplies(@RequestParam(required = false) JobFamily jobFamily,
4344
@RequestParam(required = false) final Long semesterId,
44-
@PageableDefault(size = 15) Pageable pageable) {
45+
@PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) Pageable pageable) {
4546
return adminTempApplyService.getTempApplies(jobFamily, semesterId, pageable);
4647
}
4748
}

src/main/java/org/ject/support/domain/admin/controller/ApplyPassApiSpec.java renamed to src/main/java/org/ject/support/admin/apply/controller/ApplyPassApiSpec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package org.ject.support.domain.admin.controller;
1+
package org.ject.support.admin.apply.controller;
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.ApplyPassRequest;
5+
import org.ject.support.admin.apply.dto.ApplyPassRequest;
66
import org.springframework.web.bind.annotation.RequestBody;
77

88
@Tag(name = "Apply Pass", description = "지원자 합격 API")

src/main/java/org/ject/support/domain/admin/controller/ApplyPassController.java renamed to src/main/java/org/ject/support/admin/apply/controller/ApplyPassController.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
package org.ject.support.domain.admin.controller;
1+
package org.ject.support.admin.apply.controller;
22

33
import lombok.RequiredArgsConstructor;
4-
import org.ject.support.domain.admin.dto.ApplyPassRequest;
5-
import org.ject.support.domain.admin.service.ApplyPassService;
4+
import org.ject.support.admin.apply.dto.ApplyPassRequest;
5+
import org.ject.support.admin.apply.service.ApplyPassService;
66
import org.springframework.web.bind.annotation.PostMapping;
77
import org.springframework.web.bind.annotation.RequestBody;
88
import org.springframework.web.bind.annotation.RequestMapping;

src/main/java/org/ject/support/domain/admin/controller/SubmittedApplyController.java renamed to src/main/java/org/ject/support/admin/apply/controller/SubmittedApplyController.java

Lines changed: 38 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
package org.ject.support.domain.admin.controller;
1+
package org.ject.support.admin.apply.controller;
22

33
import jakarta.validation.Valid;
44
import lombok.RequiredArgsConstructor;
5-
import org.ject.support.domain.admin.dto.SubmittedApplyBulkDeleteRequest;
6-
import org.ject.support.domain.admin.dto.SubmittedApplyCountResponse;
7-
import org.ject.support.domain.admin.dto.SubmittedApplyDetailResponse;
8-
import org.ject.support.domain.admin.dto.SubmittedApplyEditRequest;
9-
import org.ject.support.domain.admin.dto.SubmittedApplyResponse;
10-
import org.ject.support.domain.admin.service.SubmittedApplyService;
5+
import org.ject.support.admin.apply.dto.SubmittedApplyBulkDeleteRequest;
6+
import org.ject.support.admin.apply.dto.SubmittedApplyCountResponse;
7+
import org.ject.support.admin.apply.dto.SubmittedApplyDetailResponse;
8+
import org.ject.support.admin.apply.dto.SubmittedApplyEditRequest;
9+
import org.ject.support.admin.apply.dto.SubmittedApplyResponse;
10+
import org.ject.support.admin.apply.service.SubmittedApplyService;
1111
import org.ject.support.domain.member.JobFamily;
12+
import org.ject.support.domain.recruit.domain.RecruitType;
1213
import org.springframework.data.domain.Page;
1314
import org.springframework.data.domain.Pageable;
15+
import org.springframework.data.domain.Sort;
1416
import org.springframework.data.web.PageableDefault;
1517
import org.springframework.web.bind.annotation.DeleteMapping;
1618
import org.springframework.web.bind.annotation.GetMapping;
@@ -21,48 +23,65 @@
2123
import org.springframework.web.bind.annotation.RequestParam;
2224
import org.springframework.web.bind.annotation.RestController;
2325

26+
import io.swagger.v3.oas.annotations.Operation;
27+
import io.swagger.v3.oas.annotations.tags.Tag;
28+
2429
@RestController
25-
@RequestMapping("/admin/submitted-applies")
2630
@RequiredArgsConstructor
27-
public class SubmittedApplyController implements SubmittedApplyApiSpec {
31+
@RequestMapping("/admin/submitted-applies")
32+
@Tag(name = "Submitted Apply", description = "[관리자] 제출된 지원서 관리 API")
33+
public class SubmittedApplyController {
2834

2935
private final SubmittedApplyService submittedApplyService;
3036

31-
@Override
3237
@GetMapping("/count")
38+
@Operation(
39+
summary = "제출된 지원서 수 조회",
40+
description = "제출된 상태의 지원서 총 개수를 조회합니다.")
3341
public SubmittedApplyCountResponse getSubmittedApplyCount() {
3442
return submittedApplyService.countSubmittedApply();
3543
}
3644

37-
@Override
3845
@GetMapping
39-
public Page<SubmittedApplyResponse> findSubmittedApplies(@RequestParam(required = false) final JobFamily jobFamily,
40-
@RequestParam(required = false) final Long semesterId,
41-
@PageableDefault(size = 15) final Pageable pageable) {
42-
return submittedApplyService.findSubmittedApplies(jobFamily, semesterId, pageable);
46+
@Operation(
47+
summary = "제출된 지원서 목록 조회",
48+
description = "제출된 지원서들의 목록을 조회합니다.")
49+
public Page<SubmittedApplyResponse> findSubmittedApplies(@RequestParam(required = false) final Long semesterId,
50+
@RequestParam(required = false) final JobFamily jobFamily,
51+
@RequestParam(required = false) final RecruitType recruitType,
52+
@PageableDefault(size = 10, sort = "createdAt", direction = Sort.Direction.DESC) final Pageable pageable) {
53+
return submittedApplyService.findSubmittedApplies(jobFamily, semesterId, recruitType, pageable);
4354
}
4455

45-
@Override
4656
@GetMapping("/{applyId}")
57+
@Operation(
58+
summary = "제출된 지원서 상세 조회",
59+
description = "전달한 ID에 해당하는 제출된 지원서의 상세 정보를 조회합니다.")
4760
public SubmittedApplyDetailResponse findSubmittedApplyDetail(@PathVariable("applyId") final Long applyId) {
4861
return submittedApplyService.findSubmittedApplyDetail(applyId);
4962
}
5063

51-
@Override
5264
@PutMapping("/{applyId}")
65+
@Operation(
66+
summary = "제출된 지원서 수정",
67+
description = "전달한 ID에 해당하는 제출된 지원서의 정보를 수정 합니다.")
5368
public void editSubmittedApply(@PathVariable("applyId") final Long applyId,
5469
@RequestBody @Valid final SubmittedApplyEditRequest request) {
5570
submittedApplyService.updateSubmittedApply(applyId, request);
5671
}
5772

58-
@Override
5973
@DeleteMapping("/{applyId}")
74+
@Operation(
75+
summary = "제출된 지원서 삭제",
76+
description = "선택한 제출된 지원서를 삭제합니다.")
6077
public void deleteSubmittedApply(@PathVariable("applyId") final Long applyId) {
6178
submittedApplyService.deleteSubmittedApply(applyId);
6279
}
6380

64-
@Override
6581
@DeleteMapping
82+
@Operation(
83+
summary = "제출된 지원서 다수 삭제",
84+
description = "선택한 다수의 제출된 지원서들을 삭제합니다. 삭제한 수를 반환합니다.")
6685
public int deleteSubmittedApplies(@RequestBody @Valid final SubmittedApplyBulkDeleteRequest request) {
6786
return submittedApplyService.deleteSubmittedApplies(request.applyIds());
6887
}

src/main/java/org/ject/support/domain/admin/dto/ApplicationFormResponse.java renamed to src/main/java/org/ject/support/admin/apply/dto/ApplicationFormResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.ject.support.domain.admin.dto;
1+
package org.ject.support.admin.apply.dto;
22

33
import java.util.List;
44
import java.util.Map;

src/main/java/org/ject/support/domain/admin/dto/ApplyPassRequest.java renamed to src/main/java/org/ject/support/admin/apply/dto/ApplyPassRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.ject.support.domain.admin.dto;
1+
package org.ject.support.admin.apply.dto;
22

33
import java.util.List;
44

src/main/java/org/ject/support/domain/admin/dto/SubmittedApplyBulkDeleteRequest.java renamed to src/main/java/org/ject/support/admin/apply/dto/SubmittedApplyBulkDeleteRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.ject.support.domain.admin.dto;
1+
package org.ject.support.admin.apply.dto;
22

33
import io.swagger.v3.oas.annotations.media.Schema;
44
import jakarta.validation.constraints.NotEmpty;

src/main/java/org/ject/support/domain/admin/dto/SubmittedApplyCountResponse.java renamed to src/main/java/org/ject/support/admin/apply/dto/SubmittedApplyCountResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.ject.support.domain.admin.dto;
1+
package org.ject.support.admin.apply.dto;
22

33
public record SubmittedApplyCountResponse(
44
Long count

src/main/java/org/ject/support/domain/admin/dto/SubmittedApplyDetailResponse.java renamed to src/main/java/org/ject/support/admin/apply/dto/SubmittedApplyDetailResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package org.ject.support.domain.admin.dto;
1+
package org.ject.support.admin.apply.dto;
22

33
import java.util.List;
44
import java.util.Map;

0 commit comments

Comments
 (0)