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 @@ -2,7 +2,7 @@

import com.example.solidconnection.application.domain.Application;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.domain.UnivApplyInfo;

import java.util.List;

Expand All @@ -12,12 +12,12 @@ public record UniversityApplicantsResponse(
String region,
String country,
List<ApplicantResponse> applicants) {
public static UniversityApplicantsResponse of(UniversityInfoForApply universityInfoForApply, List<Application> applications, SiteUser siteUser) {
public static UniversityApplicantsResponse of(UnivApplyInfo univApplyInfo, List<Application> applications, SiteUser siteUser) {
return new UniversityApplicantsResponse(
universityInfoForApply.getKoreanName(),
universityInfoForApply.getStudentCapacity(),
universityInfoForApply.getUniversity().getRegion().getKoreanName(),
universityInfoForApply.getUniversity().getCountry().getKoreanName(),
univApplyInfo.getKoreanName(),
univApplyInfo.getStudentCapacity(),
univApplyInfo.getUniversity().getRegion().getKoreanName(),
univApplyInfo.getUniversity().getCountry().getKoreanName(),
applications.stream()
.map(application -> ApplicantResponse.of(application, isUsers(application, siteUser)))
.toList());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,27 @@

import com.example.solidconnection.application.domain.Application;
import com.example.solidconnection.application.domain.VerifyStatus;
import com.example.solidconnection.application.dto.ApplicantResponse;
import com.example.solidconnection.application.dto.ApplicationsResponse;
import com.example.solidconnection.application.dto.UniversityApplicantsResponse;
import com.example.solidconnection.application.repository.ApplicationRepository;
import com.example.solidconnection.common.exception.CustomException;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.domain.UnivApplyInfo;
import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository;
import com.example.solidconnection.university.repository.custom.UniversityFilterRepositoryImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.List;
import java.util.Objects;
import java.util.Map;
import java.util.HashMap;
import java.util.ArrayList;

import static com.example.solidconnection.common.exception.ErrorCode.APPLICATION_NOT_APPROVED;

Expand All @@ -42,13 +41,13 @@ public class ApplicationQueryService {
@Transactional(readOnly = true)
public ApplicationsResponse getApplicants(SiteUser siteUser, String regionCode, String keyword) {
// 1. 대학 지원 정보 필터링 (regionCode, keyword)
List<UniversityInfoForApply> univApplyInfos = universityFilterRepository.findByRegionCodeAndKeywords(regionCode, List.of(keyword));
List<UnivApplyInfo> univApplyInfos = universityFilterRepository.findByRegionCodeAndKeywords(regionCode, List.of(keyword));
if (univApplyInfos.isEmpty()) {
return new ApplicationsResponse(List.of(), List.of(), List.of());
}
// 2. 조건에 맞는 모든 Application 한 번에 조회
List<Long> univApplyInfoIds = univApplyInfos.stream()
.map(UniversityInfoForApply::getId)
.map(UnivApplyInfo::getId)
.toList();
List<Application> applications = applicationRepository.findAllByUnivApplyInfoIds(univApplyInfoIds, VerifyStatus.APPROVED, term);
// 3. 지원서 분류 및 DTO 변환
Expand All @@ -72,13 +71,13 @@ public ApplicationsResponse getApplicantsByUserApplications(SiteUser siteUser) {
}

List<Application> applications = applicationRepository.findAllByUnivApplyInfoIds(universityInfoForApplyIds, VerifyStatus.APPROVED, term);
List<UniversityInfoForApply> universityInfosForApply = universityInfoForApplyRepository.findAllByUniversityIds(universityInfoForApplyIds);
List<UnivApplyInfo> universityInfosForApply = universityInfoForApplyRepository.findAllByUniversityIds(universityInfoForApplyIds);

return classifyApplicationsByChoice(universityInfosForApply, applications, siteUser);
}

private ApplicationsResponse classifyApplicationsByChoice(
List<UniversityInfoForApply> universityInfosForApply,
List<UnivApplyInfo> universityInfosForApply,
List<Application> applications,
SiteUser siteUser) {
Map<Long, List<Application>> firstChoiceMap = createChoiceMap(applications, Application::getFirstChoiceUnivApplyInfoId);
Expand Down Expand Up @@ -111,7 +110,7 @@ private Map<Long, List<Application>> createChoiceMap(
}

private List<UniversityApplicantsResponse> createUniversityApplicantsResponses(
List<UniversityInfoForApply> universityInfosForApply,
List<UnivApplyInfo> universityInfosForApply,
Map<Long, List<Application>> choiceMap,
SiteUser siteUser) {
return universityInfosForApply.stream()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.example.solidconnection.score.repository.GpaScoreRepository;
import com.example.solidconnection.score.repository.LanguageTestScoreRepository;
import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.university.repository.UniversityInfoForApplyRepository;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
Expand All @@ -33,7 +32,6 @@ public class ApplicationSubmissionService {
public static final int APPLICATION_UPDATE_COUNT_LIMIT = 3;

private final ApplicationRepository applicationRepository;
private final UniversityInfoForApplyRepository universityInfoForApplyRepository;
private final GpaScoreRepository gpaScoreRepository;
private final LanguageTestScoreRepository languageTestScoreRepository;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import com.example.solidconnection.siteuser.domain.SiteUser;
import com.example.solidconnection.university.domain.LikedUniversity;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.domain.UnivApplyInfo;
import org.springframework.data.jpa.repository.JpaRepository;

import java.util.List;
Expand All @@ -14,5 +14,5 @@ public interface LikedUniversityRepository extends JpaRepository<LikedUniversity

int countBySiteUser_Id(long siteUserId);

Optional<LikedUniversity> findBySiteUserAndUniversityInfoForApply(SiteUser siteUser, UniversityInfoForApply universityInfoForApply);
Optional<LikedUniversity> findBySiteUserAndUnivApplyInfo(SiteUser siteUser, UnivApplyInfo univApplyInfo);
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ private boolean isDefaultProfileImage(String profileImageUrl) {
public List<UniversityInfoForApplyPreviewResponse> getWishUniversity(SiteUser siteUser) {
List<LikedUniversity> likedUniversities = likedUniversityRepository.findAllBySiteUser_Id(siteUser.getId());
return likedUniversities.stream()
.map(likedUniversity -> UniversityInfoForApplyPreviewResponse.from(likedUniversity.getUniversityInfoForApply()))
.map(likedUniversity -> UniversityInfoForApplyPreviewResponse.from(likedUniversity.getUnivApplyInfo()))
.toList();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
Expand All @@ -32,5 +33,6 @@ public class LanguageRequirement {
private String minScore;

@ManyToOne(fetch = FetchType.LAZY)
private UniversityInfoForApply universityInfoForApply;
@JoinColumn(name = "university_info_for_apply_id")
private UnivApplyInfo univApplyInfo;
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,10 @@
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.Table;
import jakarta.persistence.UniqueConstraint;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
Expand All @@ -16,14 +19,21 @@
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Table(uniqueConstraints = {
@UniqueConstraint(
name = "uk_liked_university_site_user_id_university_info_for_apply_id",
columnNames = {"site_user_id", "university_info_for_apply_id"}
)
})
public class LikedUniversity {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@ManyToOne
private UniversityInfoForApply universityInfoForApply;
@JoinColumn(name = "university_info_for_apply_id")
private UnivApplyInfo univApplyInfo;

@ManyToOne
private SiteUser siteUser;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import jakarta.persistence.Id;
import jakarta.persistence.ManyToOne;
import jakarta.persistence.OneToMany;
import jakarta.persistence.Table;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.EqualsAndHashCode;
Expand All @@ -24,7 +25,8 @@
@AllArgsConstructor(access = AccessLevel.PUBLIC)
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class UniversityInfoForApply {
@Table(name = "university_info_for_apply")
public class UnivApplyInfo {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
Expand Down Expand Up @@ -74,7 +76,7 @@ public class UniversityInfoForApply {
@Column(length = 1000)
private String details;

@OneToMany(mappedBy = "universityInfoForApply", fetch = FetchType.EAGER)
@OneToMany(mappedBy = "univApplyInfo", fetch = FetchType.EAGER)
private Set<LanguageRequirement> languageRequirements = new HashSet<>();

@ManyToOne(fetch = FetchType.EAGER)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
package com.example.solidconnection.university.dto;

import com.example.solidconnection.university.domain.University;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.domain.UnivApplyInfo;

import java.util.List;

Expand Down Expand Up @@ -35,11 +35,11 @@ public record UniversityDetailResponse(

public static UniversityDetailResponse of(
University university,
UniversityInfoForApply universityInfoForApply) {
UnivApplyInfo univApplyInfo) {
return new UniversityDetailResponse(
universityInfoForApply.getId(),
universityInfoForApply.getTerm(),
universityInfoForApply.getKoreanName(),
univApplyInfo.getId(),
univApplyInfo.getTerm(),
univApplyInfo.getKoreanName(),
university.getEnglishName(),
university.getFormatName(),
university.getRegion().getKoreanName(),
Expand All @@ -48,21 +48,21 @@ public static UniversityDetailResponse of(
university.getLogoImageUrl(),
university.getBackgroundImageUrl(),
university.getDetailsForLocal(),
universityInfoForApply.getStudentCapacity(),
universityInfoForApply.getTuitionFeeType().getKoreanName(),
universityInfoForApply.getSemesterAvailableForDispatch().getKoreanName(),
universityInfoForApply.getLanguageRequirements().stream()
univApplyInfo.getStudentCapacity(),
univApplyInfo.getTuitionFeeType().getKoreanName(),
univApplyInfo.getSemesterAvailableForDispatch().getKoreanName(),
univApplyInfo.getLanguageRequirements().stream()
.map(LanguageRequirementResponse::from)
.toList(),
universityInfoForApply.getDetailsForLanguage(),
universityInfoForApply.getGpaRequirement(),
universityInfoForApply.getGpaRequirementCriteria(),
universityInfoForApply.getSemesterRequirement(),
universityInfoForApply.getDetailsForApply(),
universityInfoForApply.getDetailsForMajor(),
universityInfoForApply.getDetailsForAccommodation(),
universityInfoForApply.getDetailsForEnglishCourse(),
universityInfoForApply.getDetails(),
univApplyInfo.getDetailsForLanguage(),
univApplyInfo.getGpaRequirement(),
univApplyInfo.getGpaRequirementCriteria(),
univApplyInfo.getSemesterRequirement(),
univApplyInfo.getDetailsForApply(),
univApplyInfo.getDetailsForMajor(),
univApplyInfo.getDetailsForAccommodation(),
univApplyInfo.getDetailsForEnglishCourse(),
univApplyInfo.getDetails(),
university.getAccommodationUrl(),
university.getEnglishCourseUrl()
);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.example.solidconnection.university.dto;

import com.example.solidconnection.university.domain.UniversityInfoForApply;
import com.example.solidconnection.university.domain.UnivApplyInfo;

import java.util.Collections;
import java.util.List;
Expand All @@ -16,22 +16,22 @@ public record UniversityInfoForApplyPreviewResponse(
int studentCapacity,
List<LanguageRequirementResponse> languageRequirements) {

public static UniversityInfoForApplyPreviewResponse from(UniversityInfoForApply universityInfoForApply) {
public static UniversityInfoForApplyPreviewResponse from(UnivApplyInfo univApplyInfo) {
List<LanguageRequirementResponse> languageRequirementResponses = new java.util.ArrayList<>(
universityInfoForApply.getLanguageRequirements().stream()
univApplyInfo.getLanguageRequirements().stream()
.map(LanguageRequirementResponse::from)
.toList());
Collections.sort(languageRequirementResponses);

return new UniversityInfoForApplyPreviewResponse(
universityInfoForApply.getId(),
universityInfoForApply.getTerm(),
universityInfoForApply.getKoreanName(),
universityInfoForApply.getUniversity().getRegion().getKoreanName(),
universityInfoForApply.getUniversity().getCountry().getKoreanName(),
universityInfoForApply.getUniversity().getLogoImageUrl(),
universityInfoForApply.getUniversity().getBackgroundImageUrl(),
universityInfoForApply.getStudentCapacity(),
univApplyInfo.getId(),
univApplyInfo.getTerm(),
univApplyInfo.getKoreanName(),
univApplyInfo.getUniversity().getRegion().getKoreanName(),
univApplyInfo.getUniversity().getCountry().getKoreanName(),
univApplyInfo.getUniversity().getLogoImageUrl(),
univApplyInfo.getUniversity().getBackgroundImageUrl(),
univApplyInfo.getStudentCapacity(),
languageRequirementResponses
);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,9 @@
package com.example.solidconnection.university.repository;

import com.example.solidconnection.university.domain.LanguageRequirement;
import com.example.solidconnection.university.domain.LanguageTestType;
import com.example.solidconnection.university.domain.UniversityInfoForApply;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;

import java.util.Optional;

@Repository
public interface LanguageRequirementRepository extends JpaRepository<LanguageRequirement, Long> {

@Query("SELECT lr FROM LanguageRequirement lr WHERE lr.minScore <= :myScore AND lr.languageTestType = :testType AND lr.universityInfoForApply = :universityInfoForApply ORDER BY lr.minScore ASC")
Optional<LanguageRequirement> findByUniversityInfoForApplyAndLanguageTestTypeAndLessThanMyScore(@Param("universityInfoForApply") UniversityInfoForApply universityInfoForApply, @Param("testType") LanguageTestType testType, @Param("myScore") String myScore);
}
Loading
Loading