followeeCount, followerCount 증가, 감소를 위한 메소드 일반화하기 코드 공유
280
작성한 질문수 138
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,
);
}contoller에서 사용하기
// 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 파라미터를 특정 프로퍼티만 올 수 있게 자동완성 잘됩니다.

팔로워 confirm 되면 나의 follower 증가 + 상대방 followee 증가
팔로워 삭제 되면 나의 follower 감소 + 상대방 followee 감소
await this.usersService.incrementFollowerCount(
followerId,
'followeeCount',
1,
qr,
);userId가 오는 파라미터 자리에 user.id가 아닌 followerId가 들어간 이유는 followeeCount를 증가 해야 되기 때문이다. 즉, 팔로워를 수락 했으면 나의 followerCount를 증가 시키고 상대방 followeeCount를 증가 시켜야 되기 때문에, 삭제 했을때도 같은 원리
[결과]

2번 사용자가 1번 사용자를 팔로워하고, 1번 사용자가 팔로워를 수락 했을때
답변 1
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





