-
Notifications
You must be signed in to change notification settings - Fork 0
Feat/완료된 일정 모아보기 #32
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Feat/완료된 일정 모아보기 #32
The head ref may contain hidden characters: "feat/\uC644\uB8CC\uB41C-\uC77C\uC815-\uBAA8\uC544\uBCF4\uAE30"
Conversation
- 완료된 작업을 Cassandra DB로 이동하여 기존 DB의 데이터 누적 방지 - 아카이브 조회 API를 Cassandra DB에서 조회하도록 변경
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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); |
Copilot
AI
Jan 27, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(1) 문제점: markIncomplete()에서 syncScheduleOnTaskCompletion()을 호출하고 있어, 작업을 ‘미완료’로 되돌리는 동작에서 연결된 일정이 finish() 처리(완료 처리)될 수 있습니다.
(2) 영향: 작업은 미완료인데 일정은 완료로 남는 데이터 불일치가 발생하고, 일정이 진행중/중단 상태인 경우에는 ‘작업을 완료할 수 없습니다’ 예외가 발생해 되돌리기(reopen)가 차단될 수 있습니다.
(3) 수정 제안: markIncomplete()에서는 syncScheduleOnTaskCompletion() 호출을 제거하거나, 일정 상태를 미완료로 되돌리는 별도 로직(예: syncScheduleOnTaskReopen/markIncomplete 전용)을 구현해 해당 로직을 호출하도록 수정해 주세요.
| syncScheduleOnTaskCompletion(ownerId, task); |
변경된 점