Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ public ApiResponse<MoodTrackerResponseDTO.PreviewList> getMoodTrackerPreviewList
@Parameter(hidden = true) @AuthWorkspace Workspace workspace
) {

MoodTrackerResponseDTO.PreviewList result = moodTrackerQueryService.getMoodTrackerPreviewList(user, workspace);
MoodTrackerResponseDTO.PreviewList result = moodTrackerQueryService.getPreviewList(user, workspace);

return ApiResponse.onSuccess(result);

Expand Down Expand Up @@ -155,6 +155,26 @@ public ApiResponse<Void> submitMoodTrackerSurveyAnswers(

}

@GetMapping("/{mood-tracker-hashed-Id}")
@Operation(
summary = "분위기 트래커 설문 팀분위기 베이스 정보 조회 API",
description = "# [v1.0 (2025-08-19)](https://www.notion.so/2545da7802c580dd9742d971d3a4bc08?source=copy_link) 분위기 트래커(moodTrackerId)에 대한 베이스 정보를 조회합니다."
)
@Parameters({
@Parameter(name = "mood-tracker-hashed-Id", description = "분위기 트래커 ID (Hashed, Path Variable)", required = true)
})
public ApiResponse<MoodTrackerResponseDTO.BaseResult> getMoodTrackerBaseResult(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {

MoodTrackerResponseDTO.BaseResult result = moodTrackerQueryService.getBaseResult(user, moodTracker);

return ApiResponse.onSuccess(result);

}

@GetMapping("/{mood-tracker-hashed-Id}/questions")
@Operation(
summary = "분위기 트래커 설문 문항 조회 API",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,23 @@ public static List<CheckboxChoiceAnswer> toCheckboxChoiceAnswerList(
return answers;
}

/**
* 분위기 트래커 설문 Base 정보 변환
*/
public static MoodTrackerResponseDTO.BaseResult toBaseResultDTO(MoodTracker moodTracker, HashIdUtil hashIdUtil) {
return MoodTrackerResponseDTO.BaseResult.builder()
.workspaceId(moodTracker.getWorkspace().getId())
.moodTrackerHashedId(hashIdUtil.encode(moodTracker.getId()))
.title(moodTracker.getTitle())
.creatorId(moodTracker.getCreator().getId())
.creatorName(moodTracker.getCreator().getName())
.updatedAt(moodTracker.getUpdatedAt())
.dueDate(moodTracker.getDueDate())
.respondentsNum(moodTracker.getRespondentsNum())
.build();
}


/**
* 분위기 트래커 리포트 DTO 변환
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@
import com.haru.api.domain.workspace.entity.Workspace;

public interface MoodTrackerQueryService {
MoodTrackerResponseDTO.PreviewList getMoodTrackerPreviewList(User user, Workspace workspace);
MoodTrackerResponseDTO.PreviewList getPreviewList(User user, Workspace workspace);

MoodTrackerResponseDTO.BaseResult getBaseResult(User user, MoodTracker moodTracker);

MoodTrackerResponseDTO.QuestionResult getQuestionResult(User user, MoodTracker moodTracker);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public class MoodTrackerQueryServiceImpl implements MoodTrackerQueryService {
private final SurveyQuestionRepository surveyQuestionRepository;

@Override
public MoodTrackerResponseDTO.PreviewList getMoodTrackerPreviewList(User user, Workspace workspace) {
public MoodTrackerResponseDTO.PreviewList getPreviewList(User user, Workspace workspace) {

UserWorkspace foundUserWorkspace = userWorkspaceRepository.findByWorkspaceIdAndUserId(workspace.getId(), user.getId())
.orElseThrow(() -> new UserWorkspaceHandler(ErrorStatus.USER_WORKSPACE_NOT_FOUND));
Expand All @@ -64,6 +64,32 @@ public MoodTrackerResponseDTO.PreviewList getMoodTrackerPreviewList(User user, W
return previewList;
}

@Override
@Transactional(readOnly = true)
@TrackLastOpened
public MoodTrackerResponseDTO.BaseResult getBaseResult(User user, MoodTracker moodTracker) {

// 워크스페이스 권한 조회
UserWorkspace foundUserWorkspace = userWorkspaceRepository.findByWorkspaceIdAndUserId(
moodTracker.getWorkspace().getId(), user.getId()
).orElseThrow(() -> new UserWorkspaceHandler(ErrorStatus.USER_WORKSPACE_NOT_FOUND));

// 권한 검증
boolean hasAccess =
// 워크스페이스 생성자
foundUserWorkspace.getAuth().equals(Auth.ADMIN)
// 해당 MoodTracker 생성자
|| moodTracker.getCreator().getId().equals(user.getId())
// 공개된 설문
|| moodTracker.getVisibility().equals(MoodTrackerVisibility.PUBLIC);

if (!hasAccess) {
throw new MoodTrackerHandler(ErrorStatus.MOOD_TRACKER_ACCESS_DENIED);
}

return MoodTrackerConverter.toBaseResultDTO(moodTracker, hashIdUtil);
}

@Override
@Transactional(readOnly = true)
@TrackLastOpened
Expand Down