https://docs.nestjs.com/techniques/database#typeorm-transactions

 

서비스 구현

import {Injectable} from "@nestjs/common";
import {DataSource} from "typeorm";
import {User} from "../../entity/User.entity";

@Injectable()
export class TransactionService {
    constructor(private dataSource: DataSource) {}

    async createUser(user: User){
        await this.dataSource.transaction(async (manager) =>{
            const {name} = user
            const newUser = new User();
            newUser.name = name;
            await manager.save(newUser);
            throw new Error("transaction test!!");
        });
    }
}

 

터미널에서 출력되는 내용

query: START TRANSACTION
query: INSERT INTO `user`(`id`, `name`) VALUES (DEFAULT, ?) -- PARAMETERS: ["transaction test"]
query: ROLLBACK
[Nest] 4822 - 04/29/2024, 12:44:38 PM ERROR [ExceptionsHandler] transaction test!! Error: transaction test!!

  ROLLBACK 이 되는걸 확인가능

 

아래처럼 구현을 해도 적용된다.

  async createTransaction(createPostRequestDto: CreatePostRequestDto) {
    const queryRunner = this.dataSource.createQueryRunner();
    await queryRunner.connect();
    await queryRunner.startTransaction();

    try {
      const { title, content, categories, hashtags } = createPostRequestDto;
      const newPost = new Board();
      newPost.title = title;
      newPost.content = content;
      const post = await queryRunner.manager.save(await this.boardRepository.save(newPost));

      await queryRunner.commitTransaction();
    } catch (error) {
      await queryRunner.rollbackTransaction();
    } finally {
      await queryRunner.release();
    }
  }

+ Recent posts