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 @@ -15,7 +15,5 @@ public interface UserDocumentLastOpenedService {

void deleteRecordsForWorkspaceUsers(Documentable document);

void updateRecordsForWorkspaceUsers(Documentable document);

void updateRecordsForWorkspaceUsers(Documentable document, TitleHolder titleHolder);
}
Original file line number Diff line number Diff line change
Expand Up @@ -73,19 +73,6 @@ public void deleteRecordsForWorkspaceUsers(Documentable documentable) {

}

@Override
public void updateRecordsForWorkspaceUsers(Documentable documentable) {

// 해당 문서 id, 문서 타입에 해당하는 last opened 튜플 검색
List<UserDocumentLastOpened> recordsToUpdate = userDocumentLastOpenedRepository.findByDocumentIdAndDocumentType(documentable.getId(), documentable.getDocumentType());

if (!recordsToUpdate.isEmpty()) {
for (UserDocumentLastOpened record : recordsToUpdate) {
record.updateTitle(documentable.getTitle());
}
}
}

@Override
@Transactional
public void updateRecordsForWorkspaceUsers(Documentable documentable, TitleHolder titleHolder) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package com.haru.api.domain.meeting.service;

import com.haru.api.domain.lastOpened.entity.enums.DocumentType;
import com.haru.api.domain.meeting.converter.MeetingConverter;
import com.haru.api.domain.meeting.dto.MeetingResponseDTO;
import com.haru.api.domain.meeting.entity.Meeting;
Expand Down Expand Up @@ -40,7 +39,7 @@ public List<MeetingResponseDTO.getMeetingResponse> getMeetings(User user, Worksp
}

@Override
@TrackLastOpened(type = DocumentType.AI_MEETING_MANAGER)
@TrackLastOpened
public MeetingResponseDTO.getMeetingProceeding getMeetingProceeding(User user, Meeting meeting){

User foundMeetingCreator = meeting.getCreator();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,16 @@

import com.haru.api.domain.moodTracker.dto.MoodTrackerRequestDTO;
import com.haru.api.domain.moodTracker.dto.MoodTrackerResponseDTO;
import com.haru.api.domain.moodTracker.entity.MoodTracker;
import com.haru.api.domain.moodTracker.service.MoodTrackerCommandService;
import com.haru.api.domain.moodTracker.service.MoodTrackerQueryService;
import com.haru.api.domain.snsEvent.entity.enums.Format;
import com.haru.api.domain.user.security.jwt.SecurityUtil;
import com.haru.api.domain.user.entity.User;
import com.haru.api.domain.workspace.entity.Workspace;
import com.haru.api.global.annotation.AuthMoodTracker;
import com.haru.api.global.annotation.AuthUser;
import com.haru.api.global.annotation.AuthWorkspace;
import com.haru.api.global.apiPayload.code.status.SuccessStatus;
import com.haru.api.global.util.HashIdUtil;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
Expand All @@ -29,7 +33,6 @@ public class MoodTrackerController {
// 읽기 전용
private final MoodTrackerQueryService moodTrackerQueryService;

private final HashIdUtil hashIdUtil;

@GetMapping("/workspaces/{workspaceId}")
@Operation(
Expand All @@ -40,11 +43,15 @@ public class MoodTrackerController {
@Parameter(name = "workspaceId", description = "워크스페이스 ID (Path Variable)", required = true)
})
public ApiResponse<MoodTrackerResponseDTO.PreviewList> getMoodTrackerPreviewListByWorkspace(
@PathVariable String workspaceId
@PathVariable String workspaceId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthWorkspace Workspace workspace
) {
Long userId = SecurityUtil.getCurrentUserId();
MoodTrackerResponseDTO.PreviewList result = moodTrackerQueryService.getMoodTrackerPreviewList(userId, Long.parseLong(workspaceId));

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

return ApiResponse.onSuccess(result);

}

@PostMapping("/workspaces/{workspaceId}")
Expand All @@ -57,11 +64,15 @@ public ApiResponse<MoodTrackerResponseDTO.PreviewList> getMoodTrackerPreviewList
})
public ApiResponse<MoodTrackerResponseDTO.CreateResult> createMoodTracker(
@PathVariable String workspaceId,
@RequestBody @Valid MoodTrackerRequestDTO.CreateRequest request
@RequestBody @Valid MoodTrackerRequestDTO.CreateRequest request,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthWorkspace Workspace workspace
) {
Long userId = SecurityUtil.getCurrentUserId();
MoodTrackerResponseDTO.CreateResult result = moodTrackerCommandService.create(userId, Long.parseLong(workspaceId),request);

MoodTrackerResponseDTO.CreateResult result = moodTrackerCommandService.create(user, workspace,request);

return ApiResponse.of(SuccessStatus.MOOD_TRACKER_CREATED, result);

}

@PatchMapping("/{mood-tracker-hashed-Id}")
Expand All @@ -74,12 +85,15 @@ public ApiResponse<MoodTrackerResponseDTO.CreateResult> createMoodTracker(
})
public ApiResponse<Void> updateMoodTrackerTitle(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@RequestBody @Valid MoodTrackerRequestDTO.UpdateTitleRequest request
@RequestBody @Valid MoodTrackerRequestDTO.UpdateTitleRequest request,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.updateTitle(userId, moodTrackerId, request);

moodTrackerCommandService.updateTitle(user, moodTracker, request);

return ApiResponse.of(SuccessStatus.MOOD_TRACKER_UPDATED, null);

}

@DeleteMapping("/{mood-tracker-hashed-Id}")
Expand All @@ -91,12 +105,15 @@ public ApiResponse<Void> updateMoodTrackerTitle(
@Parameter(name = "mood-tracker-hashed-Id", description = "해시된 16자 분위기 트래커 ID (Path Variable)", required = true)
})
public ApiResponse<Void> deleteMoodTracker(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.delete(userId, moodTrackerId);

moodTrackerCommandService.delete(user, moodTracker);

return ApiResponse.of(SuccessStatus.MOOD_TRACKER_DELETED, null);

}

@PostMapping("/{mood-tracker-hashed-Id}/emails")
Expand All @@ -108,11 +125,14 @@ public ApiResponse<Void> deleteMoodTracker(
@Parameter(name = "mood-tracker-hashed-Id", description = "해시된 16자 분위기 트래커 ID (Path Variable)", required = true)
})
public ApiResponse<Void> sendMoodTrackerSurveyLink(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.sendSurveyLink(moodTrackerId);

moodTrackerCommandService.sendSurveyLink(moodTracker);

return ApiResponse.of(SuccessStatus.MOOD_TRACKER_EMAIL_SENT, null);

}

@PostMapping("/{mood-tracker-hashed-Id}/answer")
Expand All @@ -125,11 +145,14 @@ public ApiResponse<Void> sendMoodTrackerSurveyLink(
})
public ApiResponse<Void> submitMoodTrackerSurveyAnswers(
@PathVariable("mood-tracker-hashed-Id") String moodTrackerHashedId,
@RequestBody MoodTrackerRequestDTO.SurveyAnswerList request
@RequestBody MoodTrackerRequestDTO.SurveyAnswerList request,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.submitSurveyAnswers(moodTrackerId, request);

moodTrackerCommandService.submitSurveyAnswers(moodTracker, request);

return ApiResponse.of(SuccessStatus.MOOD_TRACKER_ANSWER_SUBMIT, null);

}

@GetMapping("/{mood-tracker-hashed-Id}/questions")
Expand All @@ -141,12 +164,15 @@ public ApiResponse<Void> submitMoodTrackerSurveyAnswers(
@Parameter(name = "mood-tracker-hashed-Id", description = "분위기 트래커 ID (Hashed, Path Variable)", required = true)
})
public ApiResponse<MoodTrackerResponseDTO.QuestionResult> getMoodTrackerQuestionResult(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
MoodTrackerResponseDTO.QuestionResult result = moodTrackerQueryService.getQuestionResult(userId, moodTrackerId);

MoodTrackerResponseDTO.QuestionResult result = moodTrackerQueryService.getQuestionResult(user, moodTracker);

return ApiResponse.onSuccess(result);

}

@GetMapping("/{mood-tracker-hashed-Id}/reports")
Expand All @@ -158,12 +184,15 @@ public ApiResponse<MoodTrackerResponseDTO.QuestionResult> getMoodTrackerQuestion
@Parameter(name = "mood-tracker-hashed-Id", description = "분위기 트래커 ID (Hashed, Path Variable)", required = true)
})
public ApiResponse<MoodTrackerResponseDTO.ReportResult> getMoodTrackerReportResult(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
MoodTrackerResponseDTO.ReportResult result = moodTrackerQueryService.getReportResult(userId, moodTrackerId);

MoodTrackerResponseDTO.ReportResult result = moodTrackerQueryService.getReportResult(user, moodTracker);

return ApiResponse.onSuccess(result);

}

@GetMapping("/{mood-tracker-hashed-Id}/responses")
Expand All @@ -175,12 +204,15 @@ public ApiResponse<MoodTrackerResponseDTO.ReportResult> getMoodTrackerReportResu
@Parameter(name = "mood-tracker-hashed-Id", description = "분위기 트래커 ID (Hashed, Path Variable)", required = true)
})
public ApiResponse<MoodTrackerResponseDTO.ResponseResult> getMoodTrackerResponseResult(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
MoodTrackerResponseDTO.ResponseResult result = moodTrackerQueryService.getResponseResult(userId, moodTrackerId);

MoodTrackerResponseDTO.ResponseResult result = moodTrackerQueryService.getResponseResult(user, moodTracker);

return ApiResponse.onSuccess(result);

}

@GetMapping("/{mood-tracker-hashed-Id}/download")
Expand All @@ -193,12 +225,15 @@ public ApiResponse<MoodTrackerResponseDTO.ResponseResult> getMoodTrackerResponse
})
public ApiResponse<MoodTrackerResponseDTO.ReportDownLoadLinkResponse> downloadList(
@PathVariable(name = "mood-tracker-hashed-Id") String moodTrackerHashedId,
@RequestParam Format format
@RequestParam Format format,
@Parameter(hidden = true) @AuthUser User user,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long userId = SecurityUtil.getCurrentUserId();
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
MoodTrackerResponseDTO.ReportDownLoadLinkResponse result = moodTrackerCommandService.getDownloadLink(userId, moodTrackerId, format);

MoodTrackerResponseDTO.ReportDownLoadLinkResponse result = moodTrackerCommandService.getDownloadLink(user, moodTracker, format);

return ApiResponse.onSuccess(result);

}

@PostMapping("/{mood-tracker-hashed-Id}/report-test")
Expand All @@ -210,11 +245,14 @@ public ApiResponse<MoodTrackerResponseDTO.ReportDownLoadLinkResponse> downloadLi
@Parameter(name = "mood-tracker-hashed-Id", description = "해시된 16자 분위기 트래커 ID (Path Variable)", required = true)
})
public ApiResponse<Void> generateMoodTrackerReportTest (
@PathVariable("mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable("mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.generateReportTest(moodTrackerId);

moodTrackerCommandService.generateReportTest(moodTracker);

return ApiResponse.of(SuccessStatus._OK, null);

}

@PostMapping("/{mood-tracker-hashed-Id}/report-file-thumbnail-test")
Expand All @@ -226,10 +264,13 @@ public ApiResponse<Void> generateMoodTrackerReportTest (
@Parameter(name = "mood-tracker-hashed-Id", description = "해시된 16자 분위기 트래커 ID (Path Variable)", required = true)
})
public ApiResponse<Void> generateMoodTrackerReportFileAndThumbnailTest (
@PathVariable("mood-tracker-hashed-Id") String moodTrackerHashedId
@PathVariable("mood-tracker-hashed-Id") String moodTrackerHashedId,
@Parameter(hidden = true) @AuthMoodTracker MoodTracker moodTracker
) {
Long moodTrackerId = hashIdUtil.decode(moodTrackerHashedId);
moodTrackerCommandService.generateReportFileAndThumbnailTest(moodTrackerId);

moodTrackerCommandService.generateReportFileAndThumbnailTest(moodTracker);

return ApiResponse.of(SuccessStatus._OK, null);

}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.haru.api.domain.moodTracker.entity.enums.MoodTrackerVisibility;
import com.haru.api.domain.moodTracker.entity.enums.QuestionType;
import com.haru.api.global.common.entity.TitleHolder;
import com.haru.api.global.util.json.ToLongDeserializer;
import com.haru.api.global.util.json.ToLongListDeserializer;
import io.swagger.v3.oas.annotations.media.ArraySchema;
Expand Down Expand Up @@ -60,7 +61,7 @@ public static class SurveyQuestion {
@Builder
@NoArgsConstructor
@AllArgsConstructor
public static class UpdateTitleRequest {
public static class UpdateTitleRequest implements TitleHolder {
@NotBlank
private String title;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public class MoodTracker extends BaseEntity implements Documentable {
private Long id; // 설문ID

// 🔹 만든 사람 (User)와 N:1 관계
@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name = "user_id", nullable = false)
private User creator;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.haru.api.domain.moodTracker.repository;

import com.haru.api.domain.moodTracker.entity.MoodTracker;
import com.haru.api.domain.workspace.entity.Workspace;
import jakarta.transaction.Transactional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
Expand All @@ -10,6 +9,7 @@

import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;

@Repository
public interface MoodTrackerRepository extends JpaRepository<MoodTracker, Long> {
Expand All @@ -27,4 +27,11 @@ public interface MoodTrackerRepository extends JpaRepository<MoodTracker, Long>
"WHERE mt.workspace.id = :workspaceId " +
"AND mt.createdAt BETWEEN :startDate AND :endDate")
List<MoodTracker> findAllDocumentForCalendars(Long workspaceId, LocalDateTime startDate, LocalDateTime endDate);

@Query("SELECT mt FROM MoodTracker mt " +
"WHERE mt.id = :moodTrackerId AND EXISTS (" +
" SELECT 1 FROM UserWorkspace uw " +
" WHERE uw.user.id = :userId AND uw.workspace.id = mt.workspace.id" +
")")
Optional<MoodTracker> findMoodTrackerByIdIfUserHasAccess(Long userId, Long moodTrackerId);
}
Loading