Skip to content

Commit 0962b9e

Browse files
authored
Merge pull request #249 from solid-connection/develop
[RELEASE] 250222 릴리즈
2 parents fa30d3f + f9f263a commit 0962b9e

19 files changed

+629
-41
lines changed

src/main/java/com/example/solidconnection/admin/controller/AdminScoreController.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
import com.example.solidconnection.admin.dto.GpaScoreResponse;
44
import com.example.solidconnection.admin.dto.GpaScoreSearchResponse;
55
import com.example.solidconnection.admin.dto.GpaScoreUpdateRequest;
6+
import com.example.solidconnection.admin.dto.LanguageTestScoreResponse;
7+
import com.example.solidconnection.admin.dto.LanguageTestScoreSearchResponse;
8+
import com.example.solidconnection.admin.dto.LanguageTestScoreUpdateRequest;
69
import com.example.solidconnection.admin.dto.ScoreSearchCondition;
710
import com.example.solidconnection.admin.service.AdminGpaScoreService;
11+
import com.example.solidconnection.admin.service.AdminLanguageTestScoreService;
812
import com.example.solidconnection.custom.response.PageResponse;
913
import com.example.solidconnection.util.PagingUtils;
1014
import jakarta.validation.Valid;
@@ -18,6 +22,7 @@
1822
import org.springframework.web.bind.annotation.ModelAttribute;
1923
import org.springframework.web.bind.annotation.PatchMapping;
2024
import org.springframework.web.bind.annotation.PathVariable;
25+
import org.springframework.web.bind.annotation.PutMapping;
2126
import org.springframework.web.bind.annotation.RequestBody;
2227
import org.springframework.web.bind.annotation.RequestMapping;
2328
import org.springframework.web.bind.annotation.RestController;
@@ -28,7 +33,9 @@
2833
public class AdminScoreController {
2934

3035
private final AdminGpaScoreService adminGpaScoreService;
36+
private final AdminLanguageTestScoreService adminLanguageTestScoreService;
3137

38+
// todo: 추후 커스텀 페이지 객체 & argumentResolver를 적용 필요
3239
@GetMapping("/gpas")
3340
public ResponseEntity<PageResponse<GpaScoreSearchResponse>> searchGpaScores(
3441
@Valid @ModelAttribute ScoreSearchCondition scoreSearchCondition,
@@ -40,12 +47,33 @@ public ResponseEntity<PageResponse<GpaScoreSearchResponse>> searchGpaScores(
4047
return ResponseEntity.ok(PageResponse.of(page));
4148
}
4249

43-
@PatchMapping("/gpas/{gpa-score-id}")
50+
@PutMapping("/gpas/{gpa-score-id}")
4451
public ResponseEntity<GpaScoreResponse> updateGpaScore(
4552
@PathVariable("gpa-score-id") Long gpaScoreId,
4653
@Valid @RequestBody GpaScoreUpdateRequest request
4754
) {
4855
GpaScoreResponse response = adminGpaScoreService.updateGpaScore(gpaScoreId, request);
4956
return ResponseEntity.ok(response);
5057
}
58+
59+
// todo: 추후 커스텀 페이지 객체 & argumentResolver를 적용 필요
60+
@GetMapping("/language-tests")
61+
public ResponseEntity<PageResponse<LanguageTestScoreSearchResponse>> searchLanguageTestScores(
62+
@Valid @ModelAttribute ScoreSearchCondition scoreSearchCondition,
63+
@PageableDefault(page = 1) Pageable pageable
64+
) {
65+
PagingUtils.validatePage(pageable.getPageNumber(), pageable.getPageSize());
66+
Pageable internalPageable = PageRequest.of(pageable.getPageNumber() - 1, pageable.getPageSize());
67+
Page<LanguageTestScoreSearchResponse> page = adminLanguageTestScoreService.searchLanguageTestScores(scoreSearchCondition, internalPageable);
68+
return ResponseEntity.ok(PageResponse.of(page));
69+
}
70+
71+
@PutMapping("/language-tests/{language-test-score-id}")
72+
public ResponseEntity<LanguageTestScoreResponse> updateLanguageTestScore(
73+
@PathVariable("language-test-score-id") Long languageTestScoreId,
74+
@Valid @RequestBody LanguageTestScoreUpdateRequest request
75+
) {
76+
LanguageTestScoreResponse response = adminLanguageTestScoreService.updateLanguageTestScore(languageTestScoreId, request);
77+
return ResponseEntity.ok(response);
78+
}
5179
}

src/main/java/com/example/solidconnection/admin/dto/GpaScoreUpdateRequest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,5 +17,5 @@ public record GpaScoreUpdateRequest(
1717
VerifyStatus verifyStatus,
1818

1919
String rejectedReason
20-
) {
20+
) implements ScoreUpdateRequest {
2121
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
import com.example.solidconnection.type.LanguageTestType;
4+
5+
public record LanguageTestResponse(
6+
LanguageTestType languageTestType,
7+
String languageTestScore,
8+
String languageTestReportUrl
9+
) {
10+
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
import com.example.solidconnection.score.domain.LanguageTestScore;
4+
import com.example.solidconnection.type.LanguageTestType;
5+
import com.example.solidconnection.type.VerifyStatus;
6+
7+
public record LanguageTestScoreResponse(
8+
long id,
9+
LanguageTestType languageTestType,
10+
String languageTestScore,
11+
VerifyStatus verifyStatus,
12+
String rejectedReason
13+
) {
14+
public static LanguageTestScoreResponse from(LanguageTestScore languageTestScore) {
15+
return new LanguageTestScoreResponse(
16+
languageTestScore.getId(),
17+
languageTestScore.getLanguageTest().getLanguageTestType(),
18+
languageTestScore.getLanguageTest().getLanguageTestScore(),
19+
languageTestScore.getVerifyStatus(),
20+
languageTestScore.getRejectedReason()
21+
);
22+
}
23+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
public record LanguageTestScoreSearchResponse(
4+
LanguageTestScoreStatusResponse languageTestScoreStatusResponse,
5+
SiteUserResponse siteUserResponse
6+
) {
7+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
import com.example.solidconnection.type.VerifyStatus;
4+
5+
import java.time.ZonedDateTime;
6+
7+
public record LanguageTestScoreStatusResponse(
8+
long id,
9+
LanguageTestResponse languageTestResponse,
10+
VerifyStatus verifyStatus,
11+
String rejectedReason,
12+
ZonedDateTime createdAt,
13+
ZonedDateTime updatedAt
14+
) {
15+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
import com.example.solidconnection.custom.validation.annotation.RejectedReasonRequired;
4+
import com.example.solidconnection.type.LanguageTestType;
5+
import com.example.solidconnection.type.VerifyStatus;
6+
import jakarta.validation.constraints.NotNull;
7+
8+
@RejectedReasonRequired
9+
public record LanguageTestScoreUpdateRequest(
10+
11+
@NotNull(message = "어학 유형을 입력해주세요.")
12+
LanguageTestType languageTestType,
13+
14+
@NotNull(message = "어학 점수를 입력해주세요.")
15+
String languageTestScore,
16+
17+
@NotNull(message = "승인 상태를 설정해주세요.")
18+
VerifyStatus verifyStatus,
19+
20+
String rejectedReason
21+
) implements ScoreUpdateRequest {
22+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.example.solidconnection.admin.dto;
2+
3+
import com.example.solidconnection.type.VerifyStatus;
4+
5+
public interface ScoreUpdateRequest {
6+
VerifyStatus verifyStatus();
7+
String rejectedReason();
8+
}
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
package com.example.solidconnection.admin.service;
2+
3+
import com.example.solidconnection.admin.dto.LanguageTestScoreResponse;
4+
import com.example.solidconnection.admin.dto.LanguageTestScoreSearchResponse;
5+
import com.example.solidconnection.admin.dto.LanguageTestScoreUpdateRequest;
6+
import com.example.solidconnection.admin.dto.ScoreSearchCondition;
7+
import com.example.solidconnection.application.domain.LanguageTest;
8+
import com.example.solidconnection.custom.exception.CustomException;
9+
import com.example.solidconnection.score.domain.LanguageTestScore;
10+
import com.example.solidconnection.score.repository.LanguageTestScoreRepository;
11+
import com.example.solidconnection.type.VerifyStatus;
12+
import lombok.RequiredArgsConstructor;
13+
import org.springframework.data.domain.Page;
14+
import org.springframework.data.domain.Pageable;
15+
import org.springframework.stereotype.Service;
16+
import org.springframework.transaction.annotation.Transactional;
17+
18+
import static com.example.solidconnection.custom.exception.ErrorCode.LANGUAGE_TEST_SCORE_NOT_FOUND;
19+
20+
@RequiredArgsConstructor
21+
@Service
22+
public class AdminLanguageTestScoreService {
23+
24+
private final LanguageTestScoreRepository languageTestScoreRepository;
25+
26+
@Transactional(readOnly = true)
27+
public Page<LanguageTestScoreSearchResponse> searchLanguageTestScores(ScoreSearchCondition scoreSearchCondition, Pageable pageable) {
28+
return languageTestScoreRepository.searchLanguageTestScores(scoreSearchCondition, pageable);
29+
}
30+
31+
@Transactional
32+
public LanguageTestScoreResponse updateLanguageTestScore(Long languageTestScoreId, LanguageTestScoreUpdateRequest request) {
33+
LanguageTestScore languageTestScore = languageTestScoreRepository.findById(languageTestScoreId)
34+
.orElseThrow(() -> new CustomException(LANGUAGE_TEST_SCORE_NOT_FOUND));
35+
languageTestScore.updateLanguageTestScore(
36+
new LanguageTest(
37+
request.languageTestType(),
38+
request.languageTestScore(),
39+
languageTestScore.getLanguageTest().getLanguageTestReportUrl()
40+
),
41+
request.verifyStatus(),
42+
request.verifyStatus() == VerifyStatus.REJECTED ? request.rejectedReason() : null
43+
);
44+
return LanguageTestScoreResponse.from(languageTestScore);
45+
}
46+
}

src/main/java/com/example/solidconnection/custom/exception/ErrorCode.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public enum ErrorCode {
4141
REGION_NOT_FOUND_BY_KOREAN_NAME(HttpStatus.NOT_FOUND.value(), "이름에 해당하는 지역을 찾을 수 없습니다."),
4242
COUNTRY_NOT_FOUND_BY_KOREAN_NAME(HttpStatus.NOT_FOUND.value(), "이름에 해당하는 국가를 찾을 수 없습니다."),
4343
GPA_SCORE_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "존재하지 않는 학점입니다."),
44+
LANGUAGE_TEST_SCORE_NOT_FOUND(HttpStatus.NOT_FOUND.value(), "존재하지 않는 어학성적입니다."),
4445

4546
// auth
4647
USER_ALREADY_SIGN_OUT(HttpStatus.UNAUTHORIZED.value(), "로그아웃 되었습니다."),

0 commit comments

Comments
 (0)