Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat/#39: 튜터 상세조회 시 일정 정보 추가 #47

Merged
merged 1 commit into from
Dec 13, 2024
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 @@ -3,6 +3,7 @@
import inha.dayoook_e.mapping.api.controller.dto.response.SearchAgeGroupResponse;
import inha.dayoook_e.mapping.api.controller.dto.response.SearchCountryResponse;
import inha.dayoook_e.mapping.api.controller.dto.response.SearchLanguagesResponse;
import inha.dayoook_e.tutor.api.controller.dto.request.ScheduleTimeSlot;
import inha.dayoook_e.user.domain.enums.KoreanLevel;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotNull;
Expand Down Expand Up @@ -46,6 +47,8 @@ public record TutorSearchResponse(
List<SearchLanguagesResponse> languages,

@NotNull
List<SearchExperienceResponse> experiences
List<SearchExperienceResponse> experiences,

List<ScheduleTimeSlot> schedule
) {}

Original file line number Diff line number Diff line change
Expand Up @@ -79,14 +79,16 @@ default List<Experience> toExperiences(User user, List<String> descriptions) {
* @param userLanguageList 튜터 언어 리스트
* @param ageGroupList 튜터 연령대 리스트
* @param experienceList 튜터 경력 리스트
* @param schedule 튜터 일정 리스트
* @return 튜터 검색 응답
*/
@Mapping(target = "languages", source = "userLanguageList")
@Mapping(target = "ageGroups", source = "ageGroupList" )
@Mapping(target = "experiences", source = "experienceList")
@Mapping(target = "profileUrl", source = "tutor.profileUrl")
@Mapping(target = "schedule", source = "schedule")
@Mapping(target = "id", source = "tutor.id")
TutorSearchResponse toTutorSearchResponse(User tutor, TutorInfo tutorInfo, List<SearchLanguagesResponse> userLanguageList, List<SearchAgeGroupResponse> ageGroupList, List<SearchExperienceResponse> experienceList);
TutorSearchResponse toTutorSearchResponse(User tutor, TutorInfo tutorInfo, List<SearchLanguagesResponse> userLanguageList, List<SearchAgeGroupResponse> ageGroupList, List<SearchExperienceResponse> experienceList, List<ScheduleTimeSlot> schedule);

/**
* 경력 조회 응답 dto 생성
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -105,34 +105,46 @@ public TutorSearchResponse getTutor(Integer tutorId) {
// 2. Role이 tutor인지 확인
if (tutor.getRole().equals(TUTOR) == false)
throw new BaseException(INVALID_ROLE);

TutorInfo tutorInfo = tutor.getTutorInfo();

// 2-1. 조회된 tutor의 Id로 UserLanguages 조회
List<UserLanguage> languageList = userLanguageJpaRepository.findByUserId(tutorId);

// 2-2. 조회 된 UserLanguageList를 SearchLanguageResponseList로 변환
List<SearchLanguagesResponse> searchLanguagesResponses = languageList.stream().map(
userLanguage -> mappingMapper.userLanguageToSearchLanguageResponse(userLanguage)
).toList();


// 3-1. 조회된 tutor의 Id로 TutorAgeGroup 조회
List<TutorAgeGroup> ageGroupList = tutorAgeGroupJpaRepository.findByUserId(tutorId);

// 3-2. 조회된 TutorAgeGroupList를 SearchAgeGroupResponseList로 변환
// 3-2. 조회된 TutorAgeGroupList를 SearchAgeGroupResponseList로 변환
List<SearchAgeGroupResponse> searchAgeGroupResponses = ageGroupList.stream().map(
tutorAgeGroup -> mappingMapper.toSearchAgeGroupResponse(tutorAgeGroup)
).toList();


// 4-1. 조회된 tutor의 Id로 Experience 조회
List<Experience> experienceList = experienceJpaRepository.findByUserId(tutorId);

// 4-2. 조회된 ExperienceList 를 SearchExperienceResponseList로 변환
List<SearchExperienceResponse> searchExperienceResponses = experienceList.stream().map(
experience -> tutorMapper.toSearchExperienceResponse(experience)
).toList();
return tutorMapper.toTutorSearchResponse(tutor, tutorInfo, searchLanguagesResponses, searchAgeGroupResponses, searchExperienceResponses);

// 5-1. 조회된 tutor의 Id로 사용 가능한 스케줄 조회
List<TutorSchedule> scheduleList = tutorScheduleJpaRepository.findByUserIdAndIsAvailable(tutorId, true);
// 5-2. 조회된 스케줄을 ScheduleTimeSlot 리스트로 변환
List<ScheduleTimeSlot> scheduleTimeSlots = scheduleList.stream()
.map(schedule -> mappingMapper.toScheduleTimeSlot(schedule.getDay().getId(), schedule.getTimeSlot().getId()
))
.toList();

return tutorMapper.toTutorSearchResponse(
tutor,
tutorInfo,
searchLanguagesResponses,
searchAgeGroupResponses,
searchExperienceResponses,
scheduleTimeSlots
);
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,4 +15,6 @@
*/
public interface TutorScheduleJpaRepository extends JpaRepository<TutorSchedule, TutorScheduleId> {
List<TutorSchedule> findByUserId(Integer id);

List<TutorSchedule> findByUserIdAndIsAvailable(Integer tutorId, boolean isAvailable);
}
Loading