// 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 });
(중략)