TIL 70일차 (20240404)

박세연·2024년 4월 5일

TIL

목록 보기
59/70


오늘 한 일

  • 유저 게임 관심 장르 수정하기

과정을 나누자면

컨트롤러

  1. 입력받은 장르가 빈칸이면 모두 삭제인 것으로 간주, '관심 장르를 모두 삭제하는 service의 함수'로 보냄
  2. 입력받은 장르가 1개 이상이면 수정으로 간주, '겹치지 않은 기존의 관심 장르를 삭제하는 함수'로 보내고 새로 추가해야할 장르의 배열을 service로부터 받음
  3. 2의 함수의 결과물을 '새로운 관심 장르를 생성하는 함수'로 보냄

겹치지 않은 기존의 관심 장르를 삭제하는 함수

  1. 유저 정보로 있는 관심 장르들 모두 soft delete된 것들을 모두 복구 (이때 가입 시 아무것도 설정하지 않았다면 바로 컨트롤러 3의 함수로 내보냄)
  2. 회원의 관심 장르 데이터들의 장르 아이디와 입력한 새 장르 아이디를 비교, 같으면 유지, 새 장르 아이디와 다르면 soft delete 진행
  3. 위에서 유지한 장르 아이디를 새 장르 아이디에서 제외시키고 최종 새 장르 아이디들 배열을 return 시킴

새로운 관심 장르 생성 함수

위의 함수에서 유저의 아이디와 장르 아이디를 배열로 받은 후 map으로 하나씩 interestGenre를 생성함


interestGenre의 구조를 보면

  • id (interestGenre의 아이디)
  • deleteAt
  • user_id (외래키)
  • genre_id (외래키)
    인지라 외래키인 유저 정보로 interestGenre를 조회하기 위해서는 orm이 아니라 createQueryBuilder()의 도움을 받아야했다.

위에서 보면 .restore()은 softdelete된 정보들을 복구하는 메서드이고, leftJoinAndSelect()는 외래키 정보까지 가져오는 메서드이며, where절을 쓸 때는 'ig.user_id = :user_id', { user_id: id } (ig는 alias이므로 신경쓰지 말것) 처럼 두 인자를 주어야한다. 또한 수정을 할 때는 제일 마지막에 .execute()을 붙여야 수정이 완료된다. (그것을 까먹어서 꽤 오랜시간을 낭비했다...)


거의 이틀을 쏟아부은 기능이었다... 코드의 흐름을 만드는 것부터 막막했는데 설마했던 이 기능이 발목을 잡을 줄은 몰랐다.

profile
배워나가는 중

0개의 댓글