작성
·
121
0
@Post()
@UseGuards(AccessTokenGuard)
@UseInterceptors(TransactionInterceptor)
async postPost(@User("id") userId: number, @Body() body: CreatePostDto, @QueryRunner() qr: QR) {
// temp -> posts로 옮긴다음에 포스팅
const post = await this.postsService.createPost(userId, body, qr);
// throw new InternalServerErrorException("에러가 생겼습니다.");
// 포스트만 생성하고, 이미지는 생성안해버림 throw 에러에서 걸림. 원래는 포스트 게시글이 생기면 안됨.
for (let i = 0; i < body.images.length; i++) {
await this.PostsImagesService.createPostImage(
{
post,
order: i,
path: body.images[i],
type: ImageModelType.POST_IMAGE,
},
qr,
);
}
// Transaction 타입에 따라서 Transaction이 커밋 되기전에 최신 값을 가져오지 못할 수 있다. (service에서 해당 문제 처리 직접 qr받아서)
// 가장 최근상태의 포스트를 받아와서, 반환해줌.
return this.postsService.getPostById(post.id, qr);
Transaction 타입에 따라서 Transaction이 커밋 되기 전에 최신 값을 가져오지 못할 수 있다고 하셔서, getPostById service에서 직접적으로 qr을 주입받아서, 사용했는데 정확히 어떤 이유로 최신 값을 못받아오는지 잘 이해가 안가서, 자세히 설명을 해주실 수 있나요?답변 1
0
안녕하세요!
그렇게 말씀드린 이유는 한 트랜잭션 안에 묶지 않으면 하나의 isolation으로 보지 않을 수 있지 않을까라는 생각이 들었습니다. (테스트해본 사항은 아닙니다)
혹시 이 질문이 맞으실까요?
감사합니다!