회의를 하면서 담당한 폴더 코드 중 API를 user_id 받는 방식으로 수정, requestDto를 List에서 단건으로 수정 요청을 주셔서 맞춰서 Controller, Service, Repository 를 수정했는데 Repository에서 오류가 나고 실행이 안됐다.
Repository
* 기존 코드
List<Folder> findAllByUserAndTitleIn(User user, List<String> folderNames);
List<Folder> findAllByUser(User user);
* 변경 코드
List<Folder> findAllByUserAndTitleIn(User user, String folderName);
List<Folder> findAllByUser(Long userId);
여러모로 찾아봤지만 모르겠어서 튜터님께 질문드렸다..
우선 Jpa 쿼리문에서는 정해진 양식/규칙이 있어 이걸 맞춰줘야 하고 지금처럼 매개변수가 맞지 않는 경우에는 Controller 나 Service에서 바꿔줘야 한다.
1) List<Folder> findAllByUserAndTitleIn(User user, List<String>);
2) List<Folder> findAllByUserAndTitle(User user, String folderName);
* 다시 수정
List<Folder> findAllByUser(User user);
Repository를 위에처럼 수정하면 이제 Service와 맞지 않으니 데이터를 user로 가져올 수 있도록 수정 해줘야 한다.
* 기존 코드
@Transactional(readOnly = true)
public List<FolderResponseDto> getFolders(Long userId){
return folderRepository.findAllByUser(userId).stream().map(FolderResponseDto::new).toList();
}
* 변경
=> 매개변수는 그대로(Long user_id) 받고 return 전에 user에 정보를 담아주고
User user = userRepository.findById(user_id);
=> 이렇게 하면 Null이 나올수도 있다고 또 오류가 나는데 orElseThrow을 이용하여 값이 없는 경우를 설정해 주면 된다.
User user = userRepository.findById(user_id).orElseThrow(
() -> new IllegalArgumentException("존재하지 않는 사용자입니다."));
?(조건)에 들어갈 값을 매개변수로 넣어주면된다.
findFirst5ByLastnameAndFirstnameOrderByUserIdDesc("ori", "kim");