mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 07:56:24 +00:00
Fix: 대시보드 조회 내 회의록 로직 수정
This commit is contained in:
parent
1024fbd25d
commit
ec73def9d1
File diff suppressed because it is too large
Load Diff
@ -637,7 +637,7 @@ public class MinutesController {
|
|||||||
private MinutesListResponse.Statistics calculateStatistics(List<MinutesListResponse.MinutesItem> allItems,
|
private MinutesListResponse.Statistics calculateStatistics(List<MinutesListResponse.MinutesItem> allItems,
|
||||||
String participationType, String userId) {
|
String participationType, String userId) {
|
||||||
List<MinutesListResponse.MinutesItem> filteredItems = allItems.stream()
|
List<MinutesListResponse.MinutesItem> filteredItems = allItems.stream()
|
||||||
.filter(item -> filterByParticipationType(item, participationType, userId))
|
.filter(item -> filterByParticipationType(item, participationType))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
long totalCount = filteredItems.size();
|
long totalCount = filteredItems.size();
|
||||||
|
|||||||
@ -18,8 +18,10 @@ import org.springframework.stereotype.Component;
|
|||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@ -44,7 +46,7 @@ public class DashboardGateway implements DashboardReader {
|
|||||||
// 1. 다가오는 회의 목록 조회 (향후 30일, 최대 10개)
|
// 1. 다가오는 회의 목록 조회 (향후 30일, 최대 10개)
|
||||||
List<Meeting> upcomingMeetings = getUpcomingMeetings(userId);
|
List<Meeting> upcomingMeetings = getUpcomingMeetings(userId);
|
||||||
|
|
||||||
// 2. 최근 회의록 목록 조회 (최근 7일, 최대 10개)
|
// 2. 최근 회의록 목록 조회 (최근 30일, 최대 4개)
|
||||||
List<Minutes> recentMinutes = getRecentMinutes(userId);
|
List<Minutes> recentMinutes = getRecentMinutes(userId);
|
||||||
|
|
||||||
// 3. 통계 정보 계산 (최근 30일 기준)
|
// 3. 통계 정보 계산 (최근 30일 기준)
|
||||||
@ -235,36 +237,27 @@ public class DashboardGateway implements DashboardReader {
|
|||||||
* 기간별 최근 회의록 목록 조회
|
* 기간별 최근 회의록 목록 조회
|
||||||
*/
|
*/
|
||||||
private List<Minutes> getRecentMinutesByPeriod(String userId, LocalDateTime startTime, LocalDateTime endTime) {
|
private List<Minutes> getRecentMinutesByPeriod(String userId, LocalDateTime startTime, LocalDateTime endTime) {
|
||||||
Set<String> userMinutesIds = new HashSet<>();
|
log.debug("회의록 조회 시작 - userId: {}, startTime: {}, endTime: {}", userId, startTime, endTime);
|
||||||
|
|
||||||
// 작성자로 참여한 회의록 조회
|
// 사용자가 작성한 회의록만 조회 (createdBy = userId)
|
||||||
List<MinutesEntity> createdMinutes = minutesJpaRepository.findByCreatedBy(userId).stream()
|
List<MinutesEntity> userMinutes = minutesJpaRepository.findByCreatedBy(userId).stream()
|
||||||
.filter(m -> m.getCreatedAt().isAfter(startTime) && m.getCreatedAt().isBefore(endTime))
|
.filter(m -> m.getCreatedAt() != null &&
|
||||||
.toList();
|
m.getCreatedAt().isAfter(startTime) &&
|
||||||
|
m.getCreatedAt().isBefore(endTime))
|
||||||
createdMinutes.forEach(m -> userMinutesIds.add(m.getMinutesId()));
|
|
||||||
|
|
||||||
// 참석한 회의의 회의록 조회
|
|
||||||
List<String> participantMeetingIds = meetingParticipantJpaRepository.findByUserId(userId).stream()
|
|
||||||
.map(p -> p.getMeetingId())
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
List<MinutesEntity> participatedMinutes = minutesJpaRepository.findAll().stream()
|
|
||||||
.filter(m -> participantMeetingIds.contains(m.getMeetingId()))
|
|
||||||
.filter(m -> m.getCreatedAt().isAfter(startTime) && m.getCreatedAt().isBefore(endTime))
|
|
||||||
.toList();
|
|
||||||
|
|
||||||
participatedMinutes.forEach(m -> userMinutesIds.add(m.getMinutesId()));
|
|
||||||
|
|
||||||
// 중복 제거 후 최종 수정 시간순 정렬
|
|
||||||
return minutesJpaRepository.findAll().stream()
|
|
||||||
.filter(m -> userMinutesIds.contains(m.getMinutesId()))
|
|
||||||
.sorted((m1, m2) -> {
|
.sorted((m1, m2) -> {
|
||||||
LocalDateTime time1 = m1.getUpdatedAt() != null ? m1.getUpdatedAt() : m1.getCreatedAt();
|
LocalDateTime time1 = m1.getUpdatedAt() != null ? m1.getUpdatedAt() : m1.getCreatedAt();
|
||||||
LocalDateTime time2 = m2.getUpdatedAt() != null ? m2.getUpdatedAt() : m2.getCreatedAt();
|
LocalDateTime time2 = m2.getUpdatedAt() != null ? m2.getUpdatedAt() : m2.getCreatedAt();
|
||||||
return time2.compareTo(time1); // 최신순
|
return time2.compareTo(time1); // 최신순
|
||||||
})
|
})
|
||||||
// limit 제거 - 상위 메서드에서 필터링
|
.toList();
|
||||||
|
|
||||||
|
log.debug("조회된 회의록 수: {}", userMinutes.size());
|
||||||
|
userMinutes.forEach(m -> {
|
||||||
|
log.debug(" - minutesId: {}, meetingId: {}, title: {}, createdBy: {}, createdAt: {}",
|
||||||
|
m.getMinutesId(), m.getMeetingId(), m.getTitle(), m.getCreatedBy(), m.getCreatedAt());
|
||||||
|
});
|
||||||
|
|
||||||
|
return userMinutes.stream()
|
||||||
.map(MinutesEntity::toDomain)
|
.map(MinutesEntity::toDomain)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -75,7 +76,20 @@ public class MinutesGateway implements MinutesReader, MinutesWriter {
|
|||||||
@Override
|
@Override
|
||||||
public Optional<Minutes> findConsolidatedMinutesByMeetingId(String meetingId) {
|
public Optional<Minutes> findConsolidatedMinutesByMeetingId(String meetingId) {
|
||||||
log.debug("회의 ID로 AI 통합 회의록 조회: {}", meetingId);
|
log.debug("회의 ID로 AI 통합 회의록 조회: {}", meetingId);
|
||||||
return minutesJpaRepository.findByMeetingIdAndUserIdIsNull(meetingId)
|
List<MinutesEntity> consolidatedMinutes = minutesJpaRepository.findByMeetingIdAndUserIdIsNull(meetingId);
|
||||||
|
|
||||||
|
if (consolidatedMinutes.isEmpty()) {
|
||||||
|
return Optional.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 여러 개가 있을 경우 가장 최신 것을 반환 (updatedAt 또는 createdAt 기준)
|
||||||
|
return consolidatedMinutes.stream()
|
||||||
|
.sorted((m1, m2) -> {
|
||||||
|
LocalDateTime time1 = m1.getUpdatedAt() != null ? m1.getUpdatedAt() : m1.getCreatedAt();
|
||||||
|
LocalDateTime time2 = m2.getUpdatedAt() != null ? m2.getUpdatedAt() : m2.getCreatedAt();
|
||||||
|
return time2.compareTo(time1); // 최신순
|
||||||
|
})
|
||||||
|
.findFirst()
|
||||||
.map(MinutesEntity::toDomain);
|
.map(MinutesEntity::toDomain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -50,9 +50,9 @@ public interface MinutesJpaRepository extends JpaRepository<MinutesEntity, Strin
|
|||||||
List<MinutesEntity> findByMeetingIdAndUserIdIsNotNull(String meetingId);
|
List<MinutesEntity> findByMeetingIdAndUserIdIsNotNull(String meetingId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 회의 ID로 AI 통합 회의록 조회 (user_id IS NULL)
|
* 회의 ID로 AI 통합 회의록 목록 조회 (user_id IS NULL)
|
||||||
*/
|
*/
|
||||||
Optional<MinutesEntity> findByMeetingIdAndUserIdIsNull(String meetingId);
|
List<MinutesEntity> findByMeetingIdAndUserIdIsNull(String meetingId);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 사용자가 생성했거나 참여한 회의의 회의록 조회
|
* 사용자가 생성했거나 참여한 회의의 회의록 조회
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user