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 @@ -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
Expand All @@ -39,22 +37,23 @@ public ResponseEntity<List<LatestActivityResponse>> 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");
}

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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,7 @@ public class Card {
@OneToMany(mappedBy = "card", cascade = CascadeType.ALL, fetch = FetchType.LAZY)
private List<Cardlink> cardlinks;

private byte[] createdBy; // 사용자 ID 저장 필드 (x-auth-sub와 매칭됨)

}

Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -42,14 +40,17 @@ 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()))
.title(request.getTitle())
//.color(uuidHelper.convertHexToBytes(request.getColor()))
.aiSummary("")
//.userSummary("")
.createdAt(LocalDateTime.now())
.createdAt(nowInKorea)
.build();

Card savedCard = cardRepository.save(card);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -80,22 +77,27 @@ public class StatsService {
// return results;
// }

public List<LatestActivityResponse> getTodayActivitiesGroupedBySpace() {
public List<LatestActivityResponse> getTodayActivitiesGroupedBySpace(UUID userId) {
LocalDate today = LocalDate.now();
return getActivitiesByDateRangeGroupedBySpace(today, today);
return getActivitiesByDateRangeGroupedBySpace(today, today, userId);
}

public List<LatestActivityResponse> getActivitiesByDateRangeGroupedBySpace(LocalDate from, LocalDate to) {
public List<LatestActivityResponse> getActivitiesByDateRangeGroupedBySpace(LocalDate from, LocalDate to, UUID userId) {
LocalDateTime start = from.atStartOfDay();
LocalDateTime end = to.plusDays(1).atStartOfDay(); // exclusive upper bound

List<Card> cards = cardRepository.findCardsCreatedBetween(start, end);

//사용자가 생성한 카드만 필터링
List<Card> 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<String, List<Card>> groupedBySpace = cards.stream()
Map<String, List<Card>> groupedBySpace = userCards.stream()
.collect(Collectors.groupingBy(card -> uuidHelper.convertByteArrayToUUID(card.getSpaceId()).toString()));

List<LatestActivityResponse> results = new ArrayList<>();
Expand Down
Loading