Skip to content
Merged
Show file tree
Hide file tree
Changes from all 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 @@ -88,6 +88,7 @@ public enum ErrorCode {
SCHOOL_EMAIL_CONFIRM_CODE_DIFFERENT(HttpStatus.BAD_REQUEST.value(), "인증 코드가 일치하지 않습니다."),
SCHOOL_EMAIL_VERIFICATION_INFO_SAVE_FAILED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "학교 이메일 인증 정보 저장에 실패했습니다."),
SCHOOL_EMAIL_VERIFICATION_INFO_CORRUPTED(HttpStatus.INTERNAL_SERVER_ERROR.value(), "학교 이메일 인증 정보가 손상되었습니다. 인증 코드 발송을 다시 요청해주세요."),
SCHOOL_EMAIL_NOT_VERIFIED(HttpStatus.BAD_REQUEST.value(), "학교 이메일 인증이 필요합니다."),

// s3
S3_SERVICE_EXCEPTION(HttpStatus.BAD_REQUEST.value(), "S3 서비스 에러 발생"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,14 @@
import java.util.List;

public record GpaScoreStatusesResponse(
String homeUniversityName,
List<GpaScoreStatusResponse> gpaScoreStatusResponseList
) {

public static GpaScoreStatusesResponse from(List<GpaScoreStatusResponse> gpaScoreStatusResponseList) {
return new GpaScoreStatusesResponse(gpaScoreStatusResponseList);
public static GpaScoreStatusesResponse of(
String homeUniversityName,
List<GpaScoreStatusResponse> gpaScoreStatusResponseList
) {
return new GpaScoreStatusesResponse(homeUniversityName, gpaScoreStatusResponseList);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
import com.example.solidconnection.score.repository.LanguageTestScoreRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.university.service.HomeUniversityQueryService;
import java.util.List;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
Expand All @@ -35,6 +36,7 @@ public class ScoreService {
private final S3Service s3Service;
private final LanguageTestScoreRepository languageTestScoreRepository;
private final SiteUserRepository siteUserRepository;
private final HomeUniversityQueryService homeUniversityQueryService;

@Transactional
public Long submitGpaScore(long siteUserId, GpaScoreRequest gpaScoreRequest, MultipartFile file) {
Expand Down Expand Up @@ -63,13 +65,14 @@ public Long submitLanguageTestScore(long siteUserId, LanguageTestScoreRequest la
public GpaScoreStatusesResponse getGpaScoreStatus(long siteUserId) {
SiteUser siteUser = siteUserRepository.findById(siteUserId)
.orElseThrow(() -> new CustomException(USER_NOT_FOUND));
String homeUniversityName = homeUniversityQueryService.findNameByRequiredId(siteUser.getHomeUniversityId());
List<GpaScoreStatusResponse> gpaScoreStatusResponseList =
gpaScoreRepository.findBySiteUserId(siteUser.getId())
.stream()
.map(GpaScoreStatusResponse::from)
.toList();

return GpaScoreStatusesResponse.from(gpaScoreStatusResponseList);
return GpaScoreStatusesResponse.of(homeUniversityName, gpaScoreStatusResponseList);
}

@Transactional(readOnly = true)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,9 @@
import com.example.solidconnection.siteuser.dto.PasswordUpdateRequest;
import com.example.solidconnection.siteuser.repository.SiteUserRepository;
import com.example.solidconnection.university.domain.HostUniversity;
import com.example.solidconnection.university.domain.HomeUniversity;
import com.example.solidconnection.university.repository.HostUniversityRepository;
import com.example.solidconnection.university.repository.HomeUniversityRepository;
import com.example.solidconnection.university.repository.LikedUnivApplyInfoRepository;
import com.example.solidconnection.university.service.HomeUniversityQueryService;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
Expand All @@ -51,7 +50,7 @@ public class MyPageService {
private final CountryRepository countryRepository;
private final MentorRepository mentorRepository;
private final HostUniversityRepository hostUniversityRepository;
private final HomeUniversityRepository homeUniversityRepository;
private final HomeUniversityQueryService homeUniversityQueryService;
private final S3Service s3Service;
private final InterestedCountryService interestedCountryService;
private final InterestedRegionService interestedRegionService;
Expand All @@ -67,7 +66,7 @@ public MyPageResponse getMyPageInfo(long siteUserId) {

List<String> interestedCountries = null;
String universityKoreanName = null;
String homeUniversityName = findHomeUniversityName(siteUser);
String homeUniversityName = homeUniversityQueryService.findNameByNullableId(siteUser.getHomeUniversityId());
if (siteUser.getRole() == Role.MENTEE) {
interestedCountries = countryRepository.findKoreanNamesBySiteUserId(siteUser.getId());
} else if (siteUser.getRole() == Role.MENTOR) {
Expand All @@ -86,17 +85,6 @@ public MyPageResponse getMyPageInfo(long siteUserId) {
);
}

private String findHomeUniversityName(SiteUser siteUser) {
Long homeUniversityId = siteUser.getHomeUniversityId();
if (homeUniversityId == null) {
return null;
}

HomeUniversity homeUniversity = homeUniversityRepository.findById(homeUniversityId)
.orElseThrow(() -> new CustomException(UNIVERSITY_NOT_FOUND));
return homeUniversity.getName();
}

/*
* 마이페이지 정보를 수정한다.
* */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package com.example.solidconnection.university.service;

import static com.example.solidconnection.common.exception.ErrorCode.SCHOOL_EMAIL_NOT_VERIFIED;
import static com.example.solidconnection.common.exception.ErrorCode.UNIVERSITY_NOT_FOUND;

import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.university.domain.HomeUniversity;
import com.example.solidconnection.university.repository.HomeUniversityRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
@RequiredArgsConstructor
public class HomeUniversityQueryService {

private final HomeUniversityRepository homeUniversityRepository;

@Transactional(readOnly = true)
public String findNameByNullableId(Long homeUniversityId) {
if (homeUniversityId == null) {
return null;
}

return findNameById(homeUniversityId);
}

@Transactional(readOnly = true)
public String findNameByRequiredId(Long homeUniversityId) {
if (homeUniversityId == null) {
throw new CustomException(SCHOOL_EMAIL_NOT_VERIFIED);
}

return findNameById(homeUniversityId);
}

private String findNameById(Long homeUniversityId) {
HomeUniversity homeUniversity = homeUniversityRepository.findById(homeUniversityId)
.orElseThrow(() -> new CustomException(UNIVERSITY_NOT_FOUND));
return homeUniversity.getName();
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
package com.example.solidconnection.score.service;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.mockito.BDDMockito.given;

import com.example.solidconnection.common.VerifyStatus;
import com.example.solidconnection.common.exception.ErrorCode;
import com.example.solidconnection.s3.domain.UploadPath;
import com.example.solidconnection.s3.dto.UploadedFileUrlResponse;
import com.example.solidconnection.s3.service.S3Service;
Expand All @@ -20,7 +22,9 @@
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.siteuser.fixture.SiteUserFixture;
import com.example.solidconnection.support.TestContainerSpringBootTest;
import com.example.solidconnection.university.domain.HomeUniversity;
import com.example.solidconnection.university.domain.LanguageTestType;
import com.example.solidconnection.university.fixture.HomeUniversityFixture;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.DisplayName;
Expand Down Expand Up @@ -54,11 +58,16 @@ class ScoreServiceTest {
@Autowired
private LanguageTestScoreFixture languageTestScoreFixture;

@Autowired
private HomeUniversityFixture homeUniversityFixture;

private HomeUniversity homeUniversity;
private SiteUser user;

@BeforeEach
void setUp() {
user = siteUserFixture.사용자();
homeUniversity = homeUniversityFixture.인하대학교();
user = siteUserFixture.국내_대학_정보_소지_사용자(homeUniversity.getId());
}

@Test
Expand All @@ -76,6 +85,15 @@ void setUp() {
assertThat(response.gpaScoreStatusResponseList()).hasSize(scores.size());
}

@Test
void GPA_점수_상태를_조회할_때_사용자의_모학교명을_반환한다() {
// when
GpaScoreStatusesResponse response = scoreService.getGpaScoreStatus(user.getId());

// then
assertThat(response.homeUniversityName()).isEqualTo(homeUniversity.getName());
}

@Test
void GPA_점수가_없는_경우_빈_리스트를_반환한다() {
// when
Expand All @@ -85,6 +103,17 @@ void setUp() {
assertThat(response.gpaScoreStatusResponseList()).isEmpty();
}

@Test
void 모학교가_없는_사용자의_GPA_점수_상태를_조회하면_예외가_발생한다() {
// given
user = siteUserFixture.사용자();

// when
// then
assertThatThrownBy(() -> scoreService.getGpaScoreStatus(user.getId()))
.hasMessage(ErrorCode.SCHOOL_EMAIL_NOT_VERIFIED.getMessage());
}

@Test
void 어학_시험_점수_상태를_조회한다() {
// given
Expand Down
Loading