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
@@ -0,0 +1,112 @@
package com.hansung.tracktory.domain.recommendation.onboarding;

import com.hansung.tracktory.domain.catalog.organization.entity.Department;
import com.hansung.tracktory.domain.profile.entity.UserCompletedSubject;
import com.hansung.tracktory.domain.profile.entity.UserProfile;
import com.hansung.tracktory.domain.profile.repository.UserCompanyTypeRepository;
import com.hansung.tracktory.domain.profile.repository.UserCompletedSubjectRepository;
import com.hansung.tracktory.domain.profile.repository.UserDevFieldRepository;
import com.hansung.tracktory.domain.profile.repository.UserInterestRepository;
import com.hansung.tracktory.domain.profile.repository.UserProfileRepository;
import com.hansung.tracktory.domain.profile.repository.UserTrackRepository;
import com.hansung.tracktory.domain.profile.repository.UserWorkValueRepository;
import com.hansung.tracktory.domain.recommendation.onboarding.OnboardingProfileSnapshot.CompletedCourse;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/**
* ์ €์žฅ๋œ ์˜จ๋ณด๋”ฉ ํ”„๋กœํ•„์„ ์ถ”์ฒœ ์ž…๋ ฅ ์Šค๋ƒ…์ƒท์œผ๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค.
*
* <p>์ถ”์ฒœ ๋„๋ฉ”์ธ์€ ๋ณธ reader ๋ฅผ ํ†ตํ•ด์„œ๋งŒ ํ”„๋กœํ•„ ๋„๋ฉ”์ธ์˜ ์˜์† ๋ชจ๋ธ์„ ์ฝ๋Š”๋‹ค. ํŠธ๋ž™์„ ์•„์ง ์„ ํƒํ•˜์ง€ ์•Š์€ ์‚ฌ์šฉ์ž๋„ ์˜จ๋ณด๋”ฉ ํ”„๋กœํ•„์ด ์žˆ์œผ๋ฉด ๋นˆ ํŠธ๋ž™ ๋ชฉ๋ก์„ ๊ทธ๋Œ€๋กœ AI
* ์ž…๋ ฅ์œผ๋กœ ์ „๋‹ฌํ•ด, "์„ ํƒ ์—†์Œ" ๊ณผ "์„ ํƒ ์žˆ์Œ" ์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.
*/
@Component
@RequiredArgsConstructor
public class PersistedOnboardingProfileReader implements OnboardingProfileReader {

private static final int DEFAULT_ADMISSION_YEAR_UNTIL_PROFILE_SCHEMA_SUPPORTS_IT = 2023;

private final UserProfileRepository userProfileRepository;
private final UserTrackRepository userTrackRepository;
private final UserInterestRepository userInterestRepository;
private final UserDevFieldRepository userDevFieldRepository;
private final UserWorkValueRepository userWorkValueRepository;
private final UserCompanyTypeRepository userCompanyTypeRepository;
private final UserCompletedSubjectRepository userCompletedSubjectRepository;

@Override
@Transactional(readOnly = true)
public Optional<OnboardingProfileSnapshot> read(Long userId) {
return userProfileRepository.findByUserId(userId).map(profile -> toSnapshot(userId, profile));
}

private OnboardingProfileSnapshot toSnapshot(Long userId, UserProfile profile) {
Department department = profile.getDepartment();
return new OnboardingProfileSnapshot(
userId,
DEFAULT_ADMISSION_YEAR_UNTIL_PROFILE_SCHEMA_SUPPORTS_IT,
department.getCollege().getName(),
department.getName(),
currentSemester(profile.getCurrentYear()),
trackCodes(userId),
interestCodes(userId),
devFieldCodes(userId),
workValueCodes(userId),
companyTypeCodes(userId),
List.of(),
completedCourses(userId));
}

private Integer currentSemester(Integer currentYear) {
if (currentYear == null) {
return null;
}
return Math.max(1, currentYear * 2 - 1);
}

private List<String> trackCodes(Long userId) {
return userTrackRepository.findByUserIdOrderByTrackOrderAsc(userId).stream()
.map(userTrack -> userTrack.getTrack().getCode())
.toList();
}

private List<String> interestCodes(Long userId) {
return userInterestRepository.findByUserIdOrderByIdAsc(userId).stream()
.map(userInterest -> userInterest.getInterest().getCode())
.toList();
}

private List<String> devFieldCodes(Long userId) {
return userDevFieldRepository.findByUserIdOrderByIdAsc(userId).stream()
.map(userDevField -> userDevField.getDevField().getCode())
.toList();
}

private List<String> workValueCodes(Long userId) {
return userWorkValueRepository.findByUserIdOrderByIdAsc(userId).stream()
.map(userWorkValue -> userWorkValue.getWorkValue().getCode())
.toList();
}

private List<String> companyTypeCodes(Long userId) {
return userCompanyTypeRepository.findByUserIdOrderByIdAsc(userId).stream()
.map(userCompanyType -> userCompanyType.getCompanyType().getCode())
.toList();
}

private List<CompletedCourse> completedCourses(Long userId) {
return userCompletedSubjectRepository.findByUserIdOrderByYearAscSemesterAsc(userId).stream()
.map(this::completedCourse)
.toList();
}

private CompletedCourse completedCourse(UserCompletedSubject completedSubject) {
return new CompletedCourse(
completedSubject.getSubject().getCode(),
completedSubject.getYear(),
completedSubject.getSemester());
}
}

This file was deleted.

Loading
Loading