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()