From 69140cd2bbe0fe69d9b88ef700d9ba2001f77686 Mon Sep 17 00:00:00 2001 From: whqtker Date: Sun, 2 Aug 2026 01:34:03 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20=EC=A7=80=EC=9B=90=20=EB=8C=80=ED=95=99?= =?UTF-8?q?=20=EB=8B=A8=EA=B1=B4=20=EC=A1=B0=ED=9A=8C=20API=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20(#817)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 어드민 지원 대학 관리에서 수정 모달을 열 때 목록 조회(search/text) 응답만 사용하고 있어 정원 외 필드가 채워지지 않는 문제가 있었다. search/text가 반환하는 미리보기 응답에는 애초에 해당 필드들이 포함되어 있지 않아 프론트에서 해결할 수 없었다. GET /admin/univ-apply-infos/{id}를 추가해 전체 필드를 담은 AdminUnivApplyInfoResponse를 단건으로 조회할 수 있게 했다. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01EwpgqdNTrn8dGDr7g7WnYg --- .../AdminUnivApplyInfoController.java | 7 ++++ .../service/AdminUnivApplyInfoService.java | 7 ++++ .../AdminUnivApplyInfoServiceTest.java | 37 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/src/main/java/com/example/solidconnection/admin/university/controller/AdminUnivApplyInfoController.java b/src/main/java/com/example/solidconnection/admin/university/controller/AdminUnivApplyInfoController.java index e0fdbcb70..79d46506b 100644 --- a/src/main/java/com/example/solidconnection/admin/university/controller/AdminUnivApplyInfoController.java +++ b/src/main/java/com/example/solidconnection/admin/university/controller/AdminUnivApplyInfoController.java @@ -38,6 +38,13 @@ public ResponseEntity importUnivApplyInfos( return ResponseEntity.ok(adminUnivApplyInfoService.importUnivApplyInfos(request)); } + @GetMapping("/{id}") + public ResponseEntity getUnivApplyInfo( + @PathVariable long id + ) { + return ResponseEntity.ok(adminUnivApplyInfoService.getUnivApplyInfo(id)); + } + @PostMapping public ResponseEntity createUnivApplyInfo( @Valid @RequestBody AdminUnivApplyInfoCreateRequest request diff --git a/src/main/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoService.java b/src/main/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoService.java index 389c09031..93122007e 100644 --- a/src/main/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoService.java +++ b/src/main/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoService.java @@ -141,6 +141,13 @@ private HostUniversity findHostUniversity(Long hostUniversityId) { .orElseThrow(() -> new CustomException(UNIVERSITY_NOT_FOUND)); } + @Transactional(readOnly = true) + public AdminUnivApplyInfoResponse getUnivApplyInfo(long id) { + UnivApplyInfo univApplyInfo = univApplyInfoRepository.findById(id) + .orElseThrow(() -> new CustomException(UNIV_APPLY_INFO_NOT_FOUND)); + return AdminUnivApplyInfoResponse.from(univApplyInfo); + } + @Transactional @DefaultCacheOut( key = {"univApplyInfoTextSearch", "university:recommend:general"}, diff --git a/src/test/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoServiceTest.java b/src/test/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoServiceTest.java index 9f8f2c6dd..5f2ef1fcd 100644 --- a/src/test/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoServiceTest.java +++ b/src/test/java/com/example/solidconnection/admin/university/service/AdminUnivApplyInfoServiceTest.java @@ -515,6 +515,43 @@ class 지원_정보_생성 { } } + @Nested + class 지원_정보_단건_조회 { + + @Test + void 존재하는_id로_조회하면_상세_정보를_반환한다() { + // given + UnivApplyInfo univApplyInfo = univApplyInfoFixtureBuilder.univApplyInfo() + .termId(term.getId()).koreanName("괌대학(A형)") + .university(hostUniversity).homeUniversity(homeUniversity).create(); + + // when + AdminUnivApplyInfoResponse response = adminUnivApplyInfoService.getUnivApplyInfo(univApplyInfo.getId()); + + // then + assertAll( + () -> assertThat(response.id()).isEqualTo(univApplyInfo.getId()), + () -> assertThat(response.termId()).isEqualTo(term.getId()), + () -> assertThat(response.homeUniversityId()).isEqualTo(homeUniversity.getId()), + () -> assertThat(response.hostUniversityId()).isEqualTo(hostUniversity.getId()), + () -> assertThat(response.studentCapacity()).isEqualTo(univApplyInfo.getStudentCapacity()), + () -> assertThat(response.semesterRequirement()).isEqualTo(univApplyInfo.getSemesterRequirement()), + () -> assertThat(response.detailsForLanguage()).isEqualTo(univApplyInfo.getDetailsForLanguage()), + () -> assertThat(response.gpaRequirement()).isEqualTo(univApplyInfo.getGpaRequirement()), + () -> assertThat(response.gpaRequirementCriteria()).isEqualTo(univApplyInfo.getGpaRequirementCriteria()), + () -> assertThat(response.detailsForAccommodation()).isEqualTo(univApplyInfo.getDetailsForAccommodation()) + ); + } + + @Test + void 존재하지_않는_id로_조회하면_예외가_발생한다() { + // when & then + assertThatCode(() -> adminUnivApplyInfoService.getUnivApplyInfo(invalidId)) + .isInstanceOf(CustomException.class) + .hasMessage(ErrorCode.UNIV_APPLY_INFO_NOT_FOUND.getMessage()); + } + } + @Nested class 지원_정보_수정 {