Feat/완료된 일정 모아보기#32
Hidden character warning
Conversation
- 완료된 작업을 Cassandra DB로 이동하여 기존 DB의 데이터 누적 방지 - 아카이브 조회 API를 Cassandra DB에서 조회하도록 변경
There was a problem hiding this comment.
Pull request overview
완료된(마감일 지난) 작업 아카이브를 커서 기반으로 조회할 수 있는 엔드포인트를 추가하고, 마감일 기준 조회 API를 제공하며, 기본 작업 목록에서 “마감일이 지난 완료 작업”을 제외하도록 조회 로직을 변경합니다.
Changes:
- 완료 + 마감일 지난 작업 아카이브 커서 조회(
/v2/tasks/completed) 및 관련 서비스/DTO/테스트 추가 - 마감일(YYYY-MM-DD) 기준 작업 조회 API(
/v1/tasks/by-deadline,/v2/tasks/by-deadline) 추가 - 기본 작업 목록 조회에서 “미완료 + (오늘 이후/오늘 마감 완료)”만 포함하도록 Repository/Service 로직 변경(회원 오프셋 + Clock 기반)
Reviewed changes
Copilot reviewed 18 out of 18 changed files in this pull request and generated 1 comment.
Show a summary per file
| File | Description |
|---|---|
| src/test/java/me/gg/pinit/pinittask/interfaces/web/TaskControllerV2IntegrationTest.java | /v2/tasks/by-deadline 동작 검증 통합 테스트 추가 |
| src/test/java/me/gg/pinit/pinittask/interfaces/web/TaskArchiveControllerV2IntegrationTest.java | /v2/tasks/completed 커서 페이징/컷오프/검증 테스트 신규 추가 |
| src/test/java/me/gg/pinit/pinittask/domain/task/repository/TaskRepositoryTest.java | current/아카이브/마감일 조회용 Repository 쿼리 테스트 추가 및 시그니처 변경 반영 |
| src/test/java/me/gg/pinit/pinittask/application/task/service/TaskServiceTest.java | “오늘” 계산(Clock+회원 오프셋) 및 deadline 조회 테스트 추가/수정 |
| src/test/java/me/gg/pinit/pinittask/application/task/service/TaskArchiveServiceTest.java | 아카이브 서비스 컷오프/커서/검증 테스트 신규 추가 |
| src/main/java/me/gg/pinit/pinittask/interfaces/task/dto/TaskArchiveCursorPageResponseV2.java | 완료 아카이브 커서 응답 DTO 신규 추가 |
| src/main/java/me/gg/pinit/pinittask/interfaces/task/TaskControllerV2.java | V2에 deadline 조회 및 완료 아카이브 엔드포인트 추가, 목록 조회 설명/동작 반영 |
| src/main/java/me/gg/pinit/pinittask/interfaces/task/TaskControllerV1.java | V1에 deadline 조회 엔드포인트 추가 및 목록/커서 조회 설명 갱신 |
| src/main/java/me/gg/pinit/pinittask/infrastructure/config/OpenApiConfig.java | OpenAPI 설명 문구 업데이트 |
| src/main/java/me/gg/pinit/pinittask/infrastructure/config/ClockConfig.java | 시스템 Clock(UTC) Bean 제공 신규 추가 |
| src/main/java/me/gg/pinit/pinittask/domain/task/repository/TaskRepository.java | current 목록/마감일 조회/완료 아카이브 커서 조회 쿼리 및 findNextByCursor 필터 확장 |
| src/main/java/me/gg/pinit/pinittask/domain/task/model/Task.java | owner+deadline+id 기반 인덱스 추가 |
| src/main/java/me/gg/pinit/pinittask/application/task/service/TaskService.java | 기본 목록/커서 조회에서 “오늘(회원 오프셋)” 필터 적용 및 deadline 조회 API 추가 |
| src/main/java/me/gg/pinit/pinittask/application/task/service/TaskArchiveService.java | 완료 아카이브 커서 조회(컷오프/오프셋/검증/nextCursor) 서비스 신규 추가 |
Comments suppressed due to low confidence (1)
src/main/java/me/gg/pinit/pinittask/application/task/service/TaskService.java:140
- (1) 문제점: 커서 페이징에서 PageRequest를 size로만 조회한 뒤 hasNext를
tasks.size() == size로 판단하고 있습니다. 이 방식은 ‘정확히 size개가 반환되었지만 다음 데이터가 없는 경우’에도 hasNext=true가 될 수 있습니다.
(2) 영향: 클라이언트가 불필요한 다음 페이지 요청을 하게 되고, UX/트래픽 측면에서 낭비가 발생합니다(또는 마지막 페이지 판단이 부정확해집니다).
(3) 수정 제안: TaskArchiveService처럼size+1개를 조회한 뒤 초과분으로 hasNext를 판별하고, 반환 목록은 size로 잘라 nextCursor를 계산하는 방식으로 변경해 주세요(또는 Spring Data Slice 사용).
today,
PageRequest.of(0, size)
);
boolean hasNext = tasks.size() == size;
String nextCursor = hasNext ? encodeCursor(tasks.getLast()) : null;
| @Transactional | ||
| public void markIncomplete(Long ownerId, Long taskId) { | ||
| Task task = getTask(ownerId, taskId); | ||
| syncScheduleOnTaskCompletion(ownerId, task); |
There was a problem hiding this comment.
(1) 문제점: markIncomplete()에서 syncScheduleOnTaskCompletion()을 호출하고 있어, 작업을 ‘미완료’로 되돌리는 동작에서 연결된 일정이 finish() 처리(완료 처리)될 수 있습니다.
(2) 영향: 작업은 미완료인데 일정은 완료로 남는 데이터 불일치가 발생하고, 일정이 진행중/중단 상태인 경우에는 ‘작업을 완료할 수 없습니다’ 예외가 발생해 되돌리기(reopen)가 차단될 수 있습니다.
(3) 수정 제안: markIncomplete()에서는 syncScheduleOnTaskCompletion() 호출을 제거하거나, 일정 상태를 미완료로 되돌리는 별도 로직(예: syncScheduleOnTaskReopen/markIncomplete 전용)을 구현해 해당 로직을 호출하도록 수정해 주세요.
| syncScheduleOnTaskCompletion(ownerId, task); |
변경된 점