diff --git a/src/main/java/com/example/gp_backend_data/card/controller/StatsController.java b/src/main/java/com/example/gp_backend_data/card/controller/StatsController.java index 638adbd..eeca785 100644 --- a/src/main/java/com/example/gp_backend_data/card/controller/StatsController.java +++ b/src/main/java/com/example/gp_backend_data/card/controller/StatsController.java @@ -5,14 +5,12 @@ import lombok.RequiredArgsConstructor; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import org.springframework.web.server.ResponseStatusException; import java.time.LocalDate; import java.util.List; +import java.util.UUID; @RestController @RequiredArgsConstructor @@ -39,14 +37,15 @@ public ResponseEntity> getActivities( @RequestParam String filterByDate, @RequestParam String groupBy, @RequestParam(required = false) String from, - @RequestParam(required = false) String to + @RequestParam(required = false) String to, + @RequestHeader("x-auth-sub") UUID userId ) { if (!"spaceId".equals(groupBy)) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid groupBy parameter"); } if ("today".equals(filterByDate)) { - return ResponseEntity.ok(statsService.getTodayActivitiesGroupedBySpace()); + return ResponseEntity.ok(statsService.getTodayActivitiesGroupedBySpace(userId)); } else if ("range".equals(filterByDate)) { if (from == null || to == null) { throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Missing 'from' or 'to' parameter for date range"); @@ -54,7 +53,7 @@ public ResponseEntity> getActivities( LocalDate fromDate = LocalDate.parse(from); LocalDate toDate = LocalDate.parse(to); - return ResponseEntity.ok(statsService.getActivitiesByDateRangeGroupedBySpace(fromDate, toDate)); + return ResponseEntity.ok(statsService.getActivitiesByDateRangeGroupedBySpace(fromDate, toDate, userId)); } throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "Invalid filterByDate parameter"); diff --git a/src/main/java/com/example/gp_backend_data/card/domain/entity/Card.java b/src/main/java/com/example/gp_backend_data/card/domain/entity/Card.java index f60ccaf..776f2b8 100644 --- a/src/main/java/com/example/gp_backend_data/card/domain/entity/Card.java +++ b/src/main/java/com/example/gp_backend_data/card/domain/entity/Card.java @@ -50,5 +50,7 @@ public class Card { @OneToMany(mappedBy = "card", cascade = CascadeType.ALL, fetch = FetchType.LAZY) private List cardlinks; + private byte[] createdBy; // 사용자 ID 저장 필드 (x-auth-sub와 매칭됨) + } diff --git a/src/main/java/com/example/gp_backend_data/card/service/CardService.java b/src/main/java/com/example/gp_backend_data/card/service/CardService.java index f578ad1..1e12117 100644 --- a/src/main/java/com/example/gp_backend_data/card/service/CardService.java +++ b/src/main/java/com/example/gp_backend_data/card/service/CardService.java @@ -21,9 +21,7 @@ import org.springframework.web.server.ResponseStatusException; import org.springframework.http.HttpStatus; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; +import java.time.*; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -42,6 +40,9 @@ public class CardService { //지식카드 생성 public CardCreateResponse createCard(CardCreateRequest request) { + // 한국 시간으로 LocalDateTime 생성 + LocalDateTime nowInKorea = ZonedDateTime.now(ZoneId.of("Asia/Seoul")).toLocalDateTime(); + Card card = Card.builder() .cardId(uuidHelper.convertUUIDToByteArray(UUID.randomUUID())) .spaceId(uuidHelper.convertUUIDToByteArray(request.getSpaceId())) @@ -49,7 +50,7 @@ public CardCreateResponse createCard(CardCreateRequest request) { //.color(uuidHelper.convertHexToBytes(request.getColor())) .aiSummary("") //.userSummary("") - .createdAt(LocalDateTime.now()) + .createdAt(nowInKorea) .build(); Card savedCard = cardRepository.save(card); diff --git a/src/main/java/com/example/gp_backend_data/card/service/StatsService.java b/src/main/java/com/example/gp_backend_data/card/service/StatsService.java index 081955d..2abb589 100644 --- a/src/main/java/com/example/gp_backend_data/card/service/StatsService.java +++ b/src/main/java/com/example/gp_backend_data/card/service/StatsService.java @@ -18,10 +18,7 @@ import java.time.LocalDate; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.UUID; +import java.util.*; import java.util.stream.Collectors; @Service @@ -80,22 +77,27 @@ public class StatsService { // return results; // } - public List getTodayActivitiesGroupedBySpace() { + public List getTodayActivitiesGroupedBySpace(UUID userId) { LocalDate today = LocalDate.now(); - return getActivitiesByDateRangeGroupedBySpace(today, today); + return getActivitiesByDateRangeGroupedBySpace(today, today, userId); } - public List getActivitiesByDateRangeGroupedBySpace(LocalDate from, LocalDate to) { + public List getActivitiesByDateRangeGroupedBySpace(LocalDate from, LocalDate to, UUID userId) { LocalDateTime start = from.atStartOfDay(); LocalDateTime end = to.plusDays(1).atStartOfDay(); // exclusive upper bound List cards = cardRepository.findCardsCreatedBetween(start, end); + //사용자가 생성한 카드만 필터링 + List userCards = cards.stream() + .filter(card -> Arrays.equals(uuidHelper.convertUUIDToByteArray(userId), card.getCreatedBy())) // `createdBy`는 Card 엔티티에 있어야 합니다. + .toList(); + if (cards.isEmpty()) { throw new ResponseStatusException(HttpStatus.NOT_FOUND, "No activity found for selected date range."); } - Map> groupedBySpace = cards.stream() + Map> groupedBySpace = userCards.stream() .collect(Collectors.groupingBy(card -> uuidHelper.convertByteArrayToUUID(card.getSpaceId()).toString())); List results = new ArrayList<>();