Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -224,4 +224,24 @@ public GraduationUserBatchDisapproveResponse disapproveGraduationUsers(Graduatio

return GraduationUserBatchDisapproveResponse.from(disapprovedUserIds);
}

public Long approveSubmission(Long graduationUserId, Long submissionId) {
GraduationUser graduationUser = graduationUserQueryService.getById(graduationUserId);
if(graduationUser.getGraduationType() == GraduationType.CERTIFICATE) {
certificateCommandService.approve(submissionId);
} else if(graduationUser.getGraduationType() == GraduationType.THESIS) {
thesisCommandService.approve(submissionId);
}
return graduationUserId;
}

public Long disapproveSubmission(Long graduationUserId, Long submissionId) {
GraduationUser graduationUser = graduationUserQueryService.getById(graduationUserId);
if(graduationUser.getGraduationType() == GraduationType.CERTIFICATE) {
certificateCommandService.disapprove(submissionId);
} else if(graduationUser.getGraduationType() == GraduationType.THESIS) {
thesisCommandService.disapprove(submissionId);
}
return graduationUserId;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,45 @@ ResponseEntity<GraduationUserBatchDisapproveResponse> disapproveGraduationUsers(
required = true
) @Valid @RequestBody GraduationUserBatchDisapproveRequest request
);

@Operation(summary = "제출 단일 승인 API", description = """
- Description : 이 API는 선택한 졸업 대상자의 특정 논문/자격증을 승인합니다.
- Assignee : 장영후
""")
@ApiResponse(
responseCode = "200",
content = @Content(schema = @Schema(implementation = GraduationUserPersistResponse.class))
)
ResponseEntity<GraduationUserPersistResponse> approveSubmission(
@Parameter(
description = "졸업 대상자 ID는 URL 경로 변수 입니다.",
example = "1",
required = true
) @Positive @PathVariable Long graduationUserId,
@Parameter(
description = "논문/자격증 ID는 URL 경로 변수 입니다.",
example = "1",
required = true
) @Positive @PathVariable Long submissionId
);

@Operation(summary = "제출 승인 취소 API", description = """
- Description : 이 API는 선택한 졸업 대상자의 특정 논문/자격증을 승인 취소합니다.
- Assignee : 장영후
""")
@ApiResponse(
responseCode = "200",
content = @Content(schema = @Schema(implementation = GraduationUserPersistResponse.class)))
ResponseEntity<GraduationUserPersistResponse> disapproveSubmission(
@Parameter(
description = "졸업 대상자 ID는 URL 경로 변수 입니다.",
example = "1",
required = true
) @Positive @PathVariable Long graduationUserId,
@Parameter(
description = "논문/자격증 ID는 URL 경로 변수 입니다.",
example = "1",
required = true
) @Positive @PathVariable Long submissionId
);
}
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,24 @@ public ResponseEntity<GraduationUserBatchDisapproveResponse> disapproveGraduatio
GraduationUserBatchDisapproveResponse response = graduationUserAdminFacade.disapproveGraduationUsers(request);
return ResponseEntity.ok(response);
}

@Override
@PatchMapping("/approve/{graduationUserId}/{submissionId}")
public ResponseEntity<GraduationUserPersistResponse> approveSubmission(
@Positive @PathVariable Long graduationUserId,
@Positive @PathVariable Long submissionId
) {
Long approvedGraduationuserId = graduationUserAdminFacade.approveSubmission(graduationUserId,submissionId);
return ResponseEntity.ok(GraduationUserPersistResponse.of(approvedGraduationuserId));
}

@Override
@PatchMapping("/disapprove/{graduationUserId}/{submissionId}")
public ResponseEntity<GraduationUserPersistResponse> disapproveSubmission(
@Positive @PathVariable Long graduationUserId,
@Positive @PathVariable Long submissionId
) {
Long disapprovedGraduationuserId = graduationUserAdminFacade.disapproveSubmission(graduationUserId,submissionId);
return ResponseEntity.ok(GraduationUserPersistResponse.of(disapprovedGraduationuserId));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -319,10 +319,10 @@ public void approveGraduationUsers_Success() {
@DisplayName("disapproveGraduationUsers는 여러 GraduationUser의 제출 승인을 취소한다.")
public void disapproveGraduationUsers_Success() {
// given
// 먼저 승인된 상태로 만듦
fakeCertificateRepository.save(Certificate.of(1L, 1L, 1L, true, null, null, null));
fakeThesisRepository.save(Thesis.of(1L, 1L, 1L, true, null, null, null));
fakeThesisRepository.save(Thesis.of(2L, 1L, 2L, true, null, null, null));
GraduationUserBatchApproveRequest approveRequest = GraduationUserBatchApproveRequest.builder()
.ids(Arrays.asList(1L, 2L))
.build();
graduationUserAdminFacade.approveGraduationUsers(approveRequest);

List<Long> graduationUserIds = Arrays.asList(1L, 2L);
GraduationUserBatchDisapproveRequest request = GraduationUserBatchDisapproveRequest.builder()
Expand All @@ -343,9 +343,6 @@ public void disapproveGraduationUsers_Success() {
@DisplayName("disapproveGraduationUsers는 이미 승인이 취소된 유저는 결과 목록에 포함하지 않는다.")
public void disapproveGraduationUsers_AlreadyDisapproved() {
// given
// 이미 승인 취소 상태로 만듦
fakeCertificateRepository.save(Certificate.of(1L, 1L, 1L, false, null, null, null));

List<Long> graduationUserIds = List.of(1L);
GraduationUserBatchDisapproveRequest request = GraduationUserBatchDisapproveRequest.builder()
.ids(graduationUserIds)
Expand Down Expand Up @@ -375,4 +372,68 @@ public void disapproveGraduationUsers_NoSubmission() {
// then
assertEquals(0, response.disapprovedIds().size());
}

@Test
@DisplayName("approveSubmission은 자격증 타입 GraduationUser의 자격증 제출을 단일 승인한다.")
public void approveSubmission_CertificateType_Success() {
// given
Long graduationUserId = 1L;
Long submissionId = 1L; // certificateId

// when
Long result = graduationUserAdminFacade.approveSubmission(graduationUserId, submissionId);

// then
assertEquals(graduationUserId, result);
assertEquals(true, fakeCertificateRepository.findApprovalByIdAndDeletedAtIsNull(1L).get());
}

@Test
@DisplayName("approveSubmission은 논문 타입 GraduationUser의 논문 제출을 단일 승인한다.")
public void approveSubmission_ThesisType_Success() {
// given
Long graduationUserId = 2L;
Long submissionId = 1L; // midThesisId

// when
Long result = graduationUserAdminFacade.approveSubmission(graduationUserId, submissionId);

// then
assertEquals(graduationUserId, result);
assertEquals(true, fakeThesisRepository.findApprovalByIdAndDeletedAtIsNull(1L).get());
assertEquals(false, fakeThesisRepository.findApprovalByIdAndDeletedAtIsNull(2L).get());
}

@Test
@DisplayName("disapproveSubmission은 자격증 타입 GraduationUser의 자격증 제출 승인을 단일 취소한다.")
public void disapproveSubmission_CertificateType_Success() {
// given
Long graduationUserId = 1L;
Long submissionId = 1L; // certificateId
graduationUserAdminFacade.approveSubmission(graduationUserId, submissionId);

// when
Long result = graduationUserAdminFacade.disapproveSubmission(graduationUserId, submissionId);

// then
assertEquals(graduationUserId, result);
assertEquals(false, fakeCertificateRepository.findApprovalByIdAndDeletedAtIsNull(1L).get());
}

@Test
@DisplayName("disapproveSubmission은 논문 타입 GraduationUser의 논문 제출 승인을 단일 취소한다.")
public void disapproveSubmission_ThesisType_Success() {
// given
Long graduationUserId = 2L;
Long submissionId = 2L; // finalThesisId
graduationUserAdminFacade.approveSubmission(graduationUserId, submissionId);

// when
Long result = graduationUserAdminFacade.disapproveSubmission(graduationUserId, submissionId);

// then
assertEquals(graduationUserId, result);
assertEquals(false, fakeThesisRepository.findApprovalByIdAndDeletedAtIsNull(2L).get());
assertEquals(false, fakeThesisRepository.findApprovalByIdAndDeletedAtIsNull(1L).get());
}
}
Loading