Skip to content

Conversation

@GoGradually
Copy link
Collaborator

변경된 점

  • 오늘 00:00 기준 이전(어제까지) 마감일이 지난 완료 Task를 커서 기반으로 모아볼 수 있는 클라이언트용 엔드포인트 추가
  • 마감 날짜 기준 작업 조회 API 추가
  • 작업 탭의 기본 리스트가 "완료되지 않은 작업"/"마감일이 지나지 않은 완료된 작업"을 마감일 기준 오름차순으로 표시하도록 변경

- 완료된 작업을 Cassandra DB로 이동하여 기존 DB의 데이터 누적 방지
- 아카이브 조회 API를 Cassandra DB에서 조회하도록 변경
Copilot AI review requested due to automatic review settings January 27, 2026 09:32
Copy link
Contributor

Copilot AI left a 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);
Copy link

Copilot AI Jan 27, 2026

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 전용)을 구현해 해당 로직을 호출하도록 수정해 주세요.

Suggested change
syncScheduleOnTaskCompletion(ownerId, task);

Copilot uses AI. Check for mistakes.
@GoGradually GoGradually merged commit 7354511 into master Jan 27, 2026
1 check passed
@GoGradually GoGradually deleted the feat/완료된-일정-모아보기 branch January 27, 2026 09:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants