From 8b1ee5ced6533ed58a8adf204a4cbcdb04d961db Mon Sep 17 00:00:00 2001 From: 2ghrms Date: Thu, 21 Aug 2025 22:25:06 +0900 Subject: [PATCH] =?UTF-8?q?fix/#321:=20=EB=B6=84=EC=9C=84=EA=B8=B0=20?= =?UTF-8?q?=ED=8A=B8=EB=9E=98=EC=BB=A4=20=EC=A1=B0=ED=9A=8C=20=EA=B4=80?= =?UTF-8?q?=EB=A0=A8=20API=20=ED=98=B8=EC=B6=9C=EC=8B=9C=EC=97=90=20last?= =?UTF-8?q?=20opened=20=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Report 조회 API last opened 동기화 처리 - Responses 조회 API last opened 동기화 처리 --- .../UserDocumentLastOpenedServiceImpl.java | 3 ++- .../controller/MoodTrackerController.java | 4 +-- .../service/MoodTrackerQueryServiceImpl.java | 27 +++++++++++++++---- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/haru/api/domain/lastOpened/service/UserDocumentLastOpenedServiceImpl.java b/src/main/java/com/haru/api/domain/lastOpened/service/UserDocumentLastOpenedServiceImpl.java index 8fcf6c35..a2ea7bfa 100644 --- a/src/main/java/com/haru/api/domain/lastOpened/service/UserDocumentLastOpenedServiceImpl.java +++ b/src/main/java/com/haru/api/domain/lastOpened/service/UserDocumentLastOpenedServiceImpl.java @@ -12,6 +12,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; @@ -27,7 +28,7 @@ public class UserDocumentLastOpenedServiceImpl implements UserDocumentLastOpened private final UserRepository userRepository; @Override - @Transactional + @Transactional(propagation = Propagation.REQUIRES_NEW) public void updateLastOpened(UserDocumentId userDocumentId, Long workspaceId, String title) { UserDocumentLastOpened record = userDocumentLastOpenedRepository.findById(userDocumentId) diff --git a/src/main/java/com/haru/api/domain/moodTracker/controller/MoodTrackerController.java b/src/main/java/com/haru/api/domain/moodTracker/controller/MoodTrackerController.java index 6fae7c65..faa5353a 100644 --- a/src/main/java/com/haru/api/domain/moodTracker/controller/MoodTrackerController.java +++ b/src/main/java/com/haru/api/domain/moodTracker/controller/MoodTrackerController.java @@ -194,7 +194,7 @@ public ApiResponse getMoodTrackerQuestion @GetMapping("/{mood-tracker-hashed-Id}/reports") @Operation( - summary = "분위기 트래커 설문 팀분위기 리포트 조회 API", + summary = "분위기 트래커 설문 팀분위기 리포트 조회 API + last opend 처리", description = "# [v1.2 (2025-08-05)](https://www.notion.so/2295da7802c580ba8401c449389e8f78) 분위기 트래커(moodTrackerId)에 대한 팀 전체 리포트를 조회합니다." ) @Parameters({ @@ -214,7 +214,7 @@ public ApiResponse getMoodTrackerReportResu @GetMapping("/{mood-tracker-hashed-Id}/responses") @Operation( - summary = "분위기 트래커 설문 응답 조회 API", + summary = "분위기 트래커 설문 응답 조회 API + last opend 처리", description = "# [v1.2 (2025-08-05)](https://www.notion.so/2265da7802c5808290adf17d8d4591a4) 분위기 트래커(moodTrackerId)에 대한 개별 응답 데이터를 조회합니다." ) @Parameters({ diff --git a/src/main/java/com/haru/api/domain/moodTracker/service/MoodTrackerQueryServiceImpl.java b/src/main/java/com/haru/api/domain/moodTracker/service/MoodTrackerQueryServiceImpl.java index 9cfbfdbf..df4612d0 100644 --- a/src/main/java/com/haru/api/domain/moodTracker/service/MoodTrackerQueryServiceImpl.java +++ b/src/main/java/com/haru/api/domain/moodTracker/service/MoodTrackerQueryServiceImpl.java @@ -1,5 +1,7 @@ package com.haru.api.domain.moodTracker.service; +import com.haru.api.domain.lastOpened.entity.UserDocumentId; +import com.haru.api.domain.lastOpened.service.UserDocumentLastOpenedService; import com.haru.api.domain.moodTracker.converter.MoodTrackerConverter; import com.haru.api.domain.moodTracker.dto.MoodTrackerResponseDTO; import com.haru.api.domain.moodTracker.entity.MoodTracker; @@ -11,7 +13,6 @@ import com.haru.api.domain.userWorkspace.entity.enums.Auth; import com.haru.api.domain.userWorkspace.repository.UserWorkspaceRepository; import com.haru.api.domain.workspace.entity.Workspace; -import com.haru.api.global.annotation.TrackLastOpened; import com.haru.api.global.apiPayload.code.status.ErrorStatus; import com.haru.api.global.apiPayload.exception.handler.MoodTrackerHandler; import com.haru.api.global.apiPayload.exception.handler.UserWorkspaceHandler; @@ -37,6 +38,8 @@ public class MoodTrackerQueryServiceImpl implements MoodTrackerQueryService { private final SurveyQuestionRepository surveyQuestionRepository; + private final UserDocumentLastOpenedService userDocumentLastOpenedService; + @Override public MoodTrackerResponseDTO.PreviewList getPreviewList(User user, Workspace workspace) { @@ -85,10 +88,17 @@ public MoodTrackerResponseDTO.QuestionResult getQuestionResult(Long moodTrackerI } @Override - @Transactional(readOnly = true) - @TrackLastOpened + @Transactional public MoodTrackerResponseDTO.ReportResult getReportResult(User user, MoodTracker moodTracker) { + // 최근 문서 조회 동기화 + Long workspaceId = moodTracker.getWorkspaceId(); + String title = moodTracker.getTitle(); + + UserDocumentId userDocumentId = new UserDocumentId(user.getId(), moodTracker.getId(), moodTracker.getDocumentType()); + + userDocumentLastOpenedService.updateLastOpened(userDocumentId, workspaceId, title); + // 권한 확인 UserWorkspace userWorkspace = userWorkspaceRepository.findByWorkspaceIdAndUserId( moodTracker.getWorkspace().getId(), user.getId() @@ -117,10 +127,17 @@ public MoodTrackerResponseDTO.ReportResult getReportResult(User user, MoodTracke } @Override - @Transactional(readOnly = true) - @TrackLastOpened + @Transactional public MoodTrackerResponseDTO.ResponseResult getResponseResult(User user, MoodTracker moodTracker) { + // 최근 문서 조회 동기화 + Long workspaceId = moodTracker.getWorkspaceId(); + String title = moodTracker.getTitle(); + + UserDocumentId userDocumentId = new UserDocumentId(user.getId(), moodTracker.getId(), moodTracker.getDocumentType()); + + userDocumentLastOpenedService.updateLastOpened(userDocumentId, workspaceId, title); + // 권한 확인 UserWorkspace userWorkspace = userWorkspaceRepository.findByWorkspaceIdAndUserId( moodTracker.getWorkspace().getId(), user.getId()