[NestJS] TypeORM을 통한 트랜잭션 관리Node.js2023. 4. 30. 19:02
Table of Contents
서론
NestJS에서 관계가 묶여있는 여러 테이블에 INSERT를 해야하는 경우가 있습니다.
이 글에서는 TypeORM을 통해 트랜잭션을 관리해보겠습니다.
트랜잭션 관련 글
https://puleugo.tistory.com/142
https://puleugo.tistory.com/143
코드를 보여줘.
UserService에서 oauth 로그인을 진행하는 코드입니다.
export class UserService {
constructor(
@InjectRepository(User)
private readonly userRepository: Repository<User>,
@InjectRepository(UserAuth)
private readonly userAuthRepository: Repository<UserAuth>,
@InjectRepository(UserAuthProvider)
private readonly userAuthProviderRepository: Repository<UserAuthProvider>,
private readonly dataSource: DataSource,
) {}
async joinUserByOauth(data: {
providerUsername: string;
providerName: string;
}): Promise<User> {
const userAuthProvider = await this.userAuthProviderRepository.findOne({
where: {
name: data.providerName,
},
});
const queryRunner = this.dataSource.createQueryRunner();
await queryRunner.connect();
// 트랜잭션 시작
await queryRunner.startTransaction();
try {
const user = await this.userRepository.save({});
const userAuth = new UserAuth();
userAuth.provider = userAuthProvider;
userAuth.providerId = userAuthProvider.id;
userAuth.username = data.providerUsername;
userAuth.user = user;
userAuth.userId = user.id;
await this.userAuthRepository.save(userAuth);
// 커밋
await queryRunner.commitTransaction();
return user;
} catch (e) {
// 롤백
await queryRunner.rollbackTransaction();
} finally {
// 적용
await queryRunner.release()
}
}
'Node.js' 카테고리의 다른 글
[NestJS] eslint를 작성해보자. (0) | 2023.08.23 |
---|---|
원클릭 회원가입 승인 구현(telegram bot, AWS s3, Flutter, Nest.js) (0) | 2023.07.21 |
[Jest] it vs test (0) | 2023.03.04 |
[NestJS] Forever를 사용하여 영구적인 실행을 해봅시다. (0) | 2023.01.18 |
[NestJS 에러] node @nestjs/schematics:module --name=auth --no-dry-run --no-skip-import --language="ts" --source-root="src" --spec --no-flat (0) | 2023.01.17 |
@임채성 :: 푸르고 개발 블로그
글 내용 중 잘못되거나 이해되지 않는 부분은 댓글을 달아주세요! 감사합니다! 문의: puleugo@gmail.com