TIL 72일차 (20240408)

박세연·2024년 4월 8일

TIL

목록 보기
61/70


오늘 한 일

  • createQueryBuilder을 사용해서 친구 관련 기능(친구 요청, 친구창 조회, 내가 보낸 친구 요청 조회, 나에게 온 친구 요청 조회, 친구 수락, 친구 삭제) 구현하기!

✏️ 조회하기 기능

return await this.friendshipRepository
      .createQueryBuilder('friendship')
      .select(['friendship.id', 'friendship.is_friend', 'us.id', 'us.nickname', 'fr.id', 'fr.nickname'])
      .where('friendship.user_id = :user_id', { user_id: user.id })
      .orWhere('friendship.friend_id = :friend_id', { friend_id: user.id })
      .andWhere('friendship.is_friend = true')
      .leftJoin('friendship.user', 'us')
      .leftJoin('friendship.friend', 'fr')
      .getRawMany();

leftjoin을 쓰면 마지막 출력시 getMany()가 아닌 getRawMany()로 해야 제대로 출력이 된다!
(출처: https://stackoverflow.com/questions/64401212/how-to-select-specific-columns-in-typeorm-querybuilder)


✏️ 수정하기 기능

await this.friendshipRepository
      .createQueryBuilder()
      .update(Friendship)
      .set({ is_friend: true })
      .where('friend_id = :friend_id', { friend_id: user.id })
      .andWhere('id = :id', { id })
      .execute();

update의 경우 update와 set을 사용하고 execute()로 마무리한다.


  • 오늘도 애먹은 부분은 바로... module에서 관계 나타내기...
@Module({
  imports: [
    JwtModule.registerAsync({
      useFactory: (config: ConfigService) => ({
        secret: config.get<string>('JWT_SECRET_KEY'),
      }),
      inject: [ConfigService],
    }),
    TypeOrmModule.forFeature([User, Friendship]),
    UserModule,
  ],
  controllers: [FriendController],
  providers: [FriendService],
})

imports 안에는 사용할 엔티티와 모듈을, controller와 providers에는 불러올 controller와 service를 적는데 항상 헷갈린다. (그리고 항상 똑같은 에러를 마주하고 시간을 허비한다...)


내일 해야할 일

  • 디엠 방 생성하기
  • socket.io이용해서 채팅 기능 구현하기
  • 디엠 쪽 모듈 새로 생성하기
  • access token 만료 시 refresh token 생성할 구조 만들기
profile
배워나가는 중

0개의 댓글