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 @@ -58,7 +58,8 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
"/api/community/posts",
"/api/community/posts/{postNumber}",
"/api/{relatedType}/{relatedNumber}/comments",
"/api/autocomplete"
"/api/autocomplete",
"/api/users/*/profile"
).permitAll()

// 기타 경로
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package swyp.swyp6_team7.travel.service;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
Expand All @@ -22,6 +23,7 @@
import org.springframework.data.domain.Page;
@Service
@RequiredArgsConstructor
@Slf4j
public class TravelAppliedService {

private final TravelRepository travelRepository;
Expand All @@ -33,29 +35,47 @@ public class TravelAppliedService {
// 주최자가 수락한 신청 리스트
@Transactional(readOnly = true)
public Page<TravelListResponseDto> getAppliedTripsByUser(Integer userNumber, Pageable pageable) {
// 사용자가 승인된 동반자 목록 조회
List<Companion> companions = companionRepository.findByUserNumber(userNumber);
try {
// 사용자가 승인된 동반자 목록 조회
List<Companion> companions = companionRepository.findByUserNumber(userNumber);

List<TravelListResponseDto> dtos = companions.stream()
.map(Companion::getTravel)
.filter(travel -> travel.getStatus() != TravelStatus.DELETED) // 삭제된 여행 제외
.map(travel -> {
Users host = userRepository.findByUserNumber(travel.getUserNumber())
.orElseThrow(() -> new IllegalArgumentException("작성자 정보를 찾을 수 없습니다."));
int currentApplicants = travel.getCompanions().size();
boolean isBookmarked = bookmarkRepository.existsByUserNumberAndTravelNumber(userNumber, travel.getNumber());
return TravelListResponseDto.fromEntity(travel, host, currentApplicants, isBookmarked);
})
.collect(Collectors.toList());

int start = (int) pageable.getOffset();
int end = Math.min((start + pageable.getPageSize()), dtos.size());

if (start > end || start > dtos.size()) {
return new PageImpl<>(List.of(), pageable, dtos.size());
}
List<TravelListResponseDto> dtos = companions.stream()
.map(Companion::getTravel)
.filter(travel -> travel.getStatus() != TravelStatus.DELETED) // 삭제된 여행 제외
.map(travel -> {
try {
Users host = userRepository.findByUserNumber(travel.getUserNumber())
.orElseThrow(() -> {
String msg = String.format("작성자 정보를 찾을 수 없습니다. travelNumber=%d, hostUserNumber=%d",
travel.getNumber(), travel.getUserNumber());
log.error("[User Fetch ERROR - AppliedTravel] {}", msg);
return new IllegalArgumentException(msg);
});

int currentApplicants = travel.getCompanions().size();
boolean isBookmarked = bookmarkRepository.existsByUserNumberAndTravelNumber(userNumber, travel.getNumber());

return new PageImpl<>(dtos.subList(start, end), pageable, dtos.size());
return TravelListResponseDto.fromEntity(travel, host, currentApplicants, isBookmarked);
} catch (Exception e) {
log.error("신청한 여행 dto 변환 ERROR travelNumber={}, userNumber={}, error={}",
travel.getNumber(), userNumber, e.getMessage(), e);
throw e;
}
})
.collect(Collectors.toList());

int start = (int) pageable.getOffset();
int end = Math.min((start + pageable.getPageSize()), dtos.size());

if (start > end || start > dtos.size()) {
return new PageImpl<>(List.of(), pageable, dtos.size());
}

return new PageImpl<>(dtos.subList(start, end), pageable, dtos.size());
} catch (Exception e) {
log.error("getAppliedTripsByUser() ERROR : userNumber={}, error={}", userNumber, e.getMessage(), e);
throw e;
}
}


Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package swyp.swyp6_team7.travel.service;

import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
Expand All @@ -20,6 +21,7 @@

@Service
@RequiredArgsConstructor
@Slf4j
public class TravelListService {

private final TravelRepository travelRepository;
Expand All @@ -28,18 +30,30 @@ public class TravelListService {

@Transactional(readOnly = true)
public Page<TravelListResponseDto> getTravelListByUser(Integer userNumber, Pageable pageable) {
// 사용자 번호를 통해 여행 게시글 조회 (최신 등록순으로 정렬)
List<Travel> travels = travelRepository.findByUserNumber(userNumber).stream()
.filter(travel -> travel.getStatus() != TravelStatus.DELETED) // 삭제된 여행 제외
.sorted((t1, t2) -> t2.getCreatedAt().compareTo(t1.getCreatedAt())) // 최신순으로 정렬
.collect(Collectors.toList());

// 여행 엔티티를 DTO로 변환하여 반환
List<TravelListResponseDto> dtos = travels.stream()
.map(travel -> toTravelListResponseDto(travel, userNumber))
.collect(Collectors.toList());
try {
// 사용자 번호를 통해 여행 게시글 조회 (최신 등록순으로 정렬)
List<Travel> travels = travelRepository.findByUserNumber(userNumber).stream()
.filter(travel -> travel.getStatus() != TravelStatus.DELETED) // 삭제된 여행 제외
.sorted((t1, t2) -> t2.getCreatedAt().compareTo(t1.getCreatedAt())) // 최신순으로 정렬
.collect(Collectors.toList());

return toPage(dtos, pageable);
// 여행 엔티티를 DTO로 변환하여 반환
List<TravelListResponseDto> dtos = travels.stream()
.map(travel -> {
try {
return toTravelListResponseDto(travel, userNumber);
} catch (Exception e) {
log.error("TravelListResponseDto로 변환 도중 에러 : travelNumber={}, userNumber{}, error={}",
travel.getNumber(), userNumber, e.getMessage(), e);
throw e;
}
}).collect(Collectors.toList());

return toPage(dtos, pageable);
} catch (Exception e){
log.error("getTravelListByUser() error : userNumber={}, error={}", userNumber, e.getMessage(), e);
throw e;
}
}

// Travel 엔티티를 TravelListResponseDto로 변환하는 메서드
Expand All @@ -49,8 +63,13 @@ private TravelListResponseDto toTravelListResponseDto(Travel travel, Integer use
int currentApplicants = travel.getCompanions().size();

// 사용자의 이름을 가져오기 위해 userNumber로 사용자 조회
Users host = userRepository.findByUserNumber(travel.getUserNumber())
.orElseThrow(() -> new IllegalArgumentException("작성자 정보를 찾을 수 없습니다."));
Users host = userRepository.findByUserNumber(travel.getUserNumber())
.orElseThrow(() -> {
String errorMsg = String.format("작성자 정보를 찾을 수 없습니다. travelNumber=%d, userNumber=%d",
travel.getNumber(), travel.getUserNumber());
log.error("[User Fetch ERROR] {}", errorMsg);
return new IllegalArgumentException(errorMsg);
});


// 태그 리스트 추출
Expand Down
Loading