(error) 사용자 추천 기능과 친해지고 싶어요

전성영·2022년 7월 10일
0

Error

목록 보기
15/16

매칭을 할 사용자 검색을 할 때 밑에 뷰에 사용자 추천해주는 기능을 만들고 싶었다.
이 정도 기능이면 내 실력으로도 가능할 거 같아서 시작!!

처음에는...

MatchingController

//사용자 검색 들어갔을 때(추천 사용자)
@GetMapping("/api/users/recommend")
public List<MatchingResponseDto> recommendMember(@AuthenticationPrincipal UserDetailsImpl userDetails){
     return matchingService.recommendMember(userDetails);
 }

MatchingResponseDto 에는 추천 사용자를 보여줄 때 필요한 정보를 담고있다.

여기까지는 순조로웠다...

MatchingService 초기 코드

Pageable pageable = PageRequest.of(0, 4, Sort.Direction.DESC, "level");

4개의 정보를 클라이언트에 보내주고 level 컬럼을 기준으로 내림차순을 하는 코드이다. 이걸 나중에 고친다.

MemberRepository 초기 코드

// 사용자 추천
   @Query("select m " +
           "from Member m " +
           "join m.character c " +
           "where m.matchingState = :matchingState " +
           "and " +
           "m.id not in (:memberId) " +
           "and " +
           "c.level between :level + 3 and :level - 3")
   List<Member>findUserByLevel(Pageable pageable, @Param("level") int level, @Param("memberId") Long memberId , @Param("matchingState") Boolean matchingState);

멤버의 정보를 출력해주는데character를 join해준다.
where 절에는 matchingstate를 받는데 false로 고정을 해주었고,
not in을 통하여 자기 자신을 제외하고 출력하게 해주었다.
마지막으로 자신의 레벨을 파라미터 바인딩으로 받는데 +-3을 해준 값 사이를 between으로 뽑아오는 쿼리를 작성하였다.

자. 돌려보자.

첫 번째 문제

could not resolve property: level of: com.hanghae.todoli.member.Member

에러를 읽지 않고 그냥 복붙해서 구글링 하는 습관 때문에 찾는데 길어진 것 같다.
무튼 결론부터 말하자면 Member에 level이라는 컬럼이 없는 것이다.
어? 뭐지? 하면서 코드를 보는데 service쪽 page 코드를 보면 level 기준으로 desc 해준다고 내가 내 손으로 짰었다.
오늘의 집 클론코딩을 할 때에는 생성날짜 기준으로 작성을 하다보니 몰랐다..
level을 빼주니 해결 완료!! 정말 이렇게 쉬운걸 ㅎ

무튼 수정을 한 후 다시 시작!

두 번째 문제

어라? List빈 값이 출력이 되네? 쿼리가 잘못된건가?
between에서 구린 냄새가 났다. between을 빼고 테스트를 하니 잘 출력이 되었다. between 뭐가 문제일까?

c.level between :level + 3 and :level - 3")

아마 다들 바로 찾으실 거 같다.
between의 파라미터 위치가 변경이 되었다.
-3 +3 으로 가야하는데 그냥 급한대로 막 넣은 거 같다.
두 문제 다 엄청엄청 사소한 것이였다. 그치만 뭔가 뿌듯했다.
누군가에게 의지해서 물어보고 배우는 것이 아닌 혼자 한 느낌?
이러면서 점점 실력을 키워나가고 나중엔 내가 알려주는 입장이 되고싶다.

수정 후 전체 코드

service

Repository

getThumbnailDtos 함수는 멤버가 끼고있는 아이템의 번호들을 가져와서 그 아이템의 정보들을 받아오는 함수이다.

윗 사진 주석들을 무시하면 된다!!

실행결과

장착한 아이템이 없어서 빈 list가 출력되는 것이니 안심하라구~

profile
Slow and Steady

0개의 댓글