[TIL] Day 44 : service layer에서 transaction 하는 방법 (수정 필요)

Q·2024년 6월 18일

TIL

목록 보기
45/59

// base.repository.js

export class BaseRepository {
  constructor(prisma) {
    this.prisma = prisma;
  }

  createTransaction = async () => {
    return await this.prisma.$transaction;
  };
}

// review.repository.js

import { BaseRepository } from './base.repository.js';

export class ReviewRepository extends BaseRepository {
  create = async (userId, storeId, orderId, rating, { tx }) => {
    const orm = tx || this.prisma;
    const createdReview = await orm.review.create({
      data: { userId, storeId, orderId, rating },
    });

    return createdReview;
  };
}

// review.service.js

(중략)
// Transaction 생성
    const tx = await this.reviewRepository.createTransaction();

    // 리뷰 생성
    const createdReview = await this.reviewRepository.create(userId, storeId, orderId, rating, content, image, { tx });

    // 가게 평균 별점, 총 리뷰 수 수정
    const updatedTotalReviews = store.totalReviews + 1;
    const updatedStoreRating = (store.averageRating * store.totalReviews + rating) / updatedTotalReviews;
    await this.storeRepository.updateRating(storeId, updatedStoreRating, updatedTotalReviews, { tx });
(중략)

0개의 댓글