inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] NestJS REST API 백엔드 완전 정복 마스터 클래스 - NestJS Core

Follow Count Incremet & Decrement 작업하기 - 2

followeeCount, followerCount 증가, 감소를 위한 메소드 일반화하기 코드 공유

280

rhkdtjd_12

작성한 질문수 138

0

 

increment(conditions: FindOptionsWhere<Entity>, propertyPath: string, value: number | string)

먼저 increment메소드의 propertyPath 부분이 특정 Model의 프로퍼티를 추론 하지 않고 string으로 박혀 있는게 마음에 들지 않아서 대상이 되는 프로퍼티 필드 명을 추론 하게 작성 했습니다.

// users.service.ts
async incrementFollowerCount(
    userId: number,
    fieldName: keyof Pick<UsersModel, 'followerCount' | 'followeeCount'>,
    incrementCount: number,
    qr?: QueryRunner,
  ) {
    const usersRepository = this.getUsersRepository(qr);

    await usersRepository.increment(
      {
        id: userId,
      },
      fieldName,
      incrementCount,
    );
  }

1. fieldName: 어떤 프로퍼티를 증가, 감소를 할것인지 특정하는 파라미터

2. incrementCount : 몇 증가 시킬것인지 증가 value

// users.service.ts
async decrementFollowerCount(
    userId: number,
    fieldName: keyof Pick<UsersModel, 'followerCount' | 'followeeCount'>,
    decrementCount: number,
    qr?: QueryRunner,
  ) {
    const usersRepository = this.getUsersRepository(qr);

    await usersRepository.decrement(
      {
        id: userId,
      },
      fieldName,
      decrementCount,
    );
  }
// users.controller.ts
@Patch('follow/:id/confirm')
  @UseInterceptors(TransactionInterceptoer)
  async patchFollowConfirm(
    @User() user: UsersModel,
    @Param('id', ParseIntPipe) followerId: number,
    @QueryRunnerDecorator() qr: QueryRunner,
  ) {
    await this.usersService.confirmFollow(followerId, user.id);

    await this.usersService.incrementFollowerCount(
      user.id,
      'followerCount',
      1,
      qr,
    );

    await this.usersService.incrementFollowerCount(
      followerId,
      'followeeCount',
      1,
      qr,
    );

    return true;
  }

@Delete('follow/:id')
  @UseInterceptors(TransactionInterceptoer)
  async deleteFollow(
    @User() user: UsersModel,
    @Param('id', ParseIntPipe) followeeId: number,
    @QueryRunnerDecorator() qr: QueryRunner,
  ) {
    await this.usersService.deleteFollow(user.id, followeeId);

    await this.usersService.decrementFollowerCount(
      user.id,
      'followerCount',
      1,
      qr,
    );

    await this.usersService.decrementFollowerCount(
      followeeId,
      'followeeCount',
      1,
      qr,
    );
    return true;
  }

filedName 파라미터를 특정 프로퍼티만 올 수 있게 자동완성 잘됩니다.

await this.usersService.incrementFollowerCount(
  followerId,
  'followeeCount',
   1,
   qr,
);

userId가 오는 파라미터 자리에 user.id가 아닌 followerId가 들어간 이유는 followeeCount를 증가 해야 되기 때문이다. 즉, 팔로워를 수락 했으면 나의 followerCount를 증가 시키고 상대방 followeeCount를 증가 시켜야 되기 때문에, 삭제 했을때도 같은 원리

[결과]

2번 사용자가 1번 사용자를 팔로워하고, 1번 사용자가 팔로워를 수락 했을때

javascript typescript rest-api nestjs backend

답변 1

1

코드팩토리

안녕하세요!

열심히 하셨네요!

공유 감사합니다!

0

rhkdtjd_12

재미있는 강의 만들어 주셔서 감사합니다. 덕분에 즐겁게 완강 했네요! 😃

cascade 질문

0

40

1

@types/bcrypt 설치과정이 누락된것같습니다.

0

49

1

process.env port key 에러

0

47

1

추상화

0

50

1

[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상

0

101

2

where 키워드가 들어가는 메서드와 아닌 메서드

0

57

1

BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?

0

72

1

app.controller app.service 는 지워도되나요?

0

70

1

@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이

0

79

1

포트 3000에서 listen하는 곳까지 넘어가지 않습니다.

0

67

1

PickType 사용 시 `as const`를 꼭 사용해야 하나요?

0

102

2

socket connect 오류

0

97

2

강의를 들으면서 궁금한 점

0

97

2

DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?

0

60

2

커리큘럼 질문

0

100

2

put 요청은 언제

0

90

3

typeorm VS prisma

0

351

2

142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.

0

77

2

User 데코레이터 버그 수정 전달드립니다.

0

67

1

git 주소 부탁드립니다.

0

113

2

nest g resource 명령어 에러

0

99

2

로그인 엔드포인트 관련 질문

0

85

2

yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우

0

148

3

"흔히 사용되는 메서드" 강의 관련 질문입니다~

0

95

2