Skip to content

[FEAT] 인수인계 상세 패키지 조회 API + 작성자 서술·타임라인 시작점 - #208

Merged
mosungjin merged 1 commit into
developfrom
claude/token-metering-e-handoff-dc40c3
Aug 7, 2026
Merged

[FEAT] 인수인계 상세 패키지 조회 API + 작성자 서술·타임라인 시작점#208
mosungjin merged 1 commit into
developfrom
claude/token-metering-e-handoff-dc40c3

Conversation

@jongjunn

@jongjunn jongjunn commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

개요

FE 인수인계 상세 화면(/team/handover/:id) 연동을 위한 백엔드 3건. 전부 인수인계(E) 도메인 = 본인 소유이며, develop 최신 위에 올렸습니다.

변경

1. 🔴 상세 패키지 조회 — GET /api/handovers/{id}/package

  • FE 상세 화면이 요구하는 리치 뷰(액션 타임라인·인계 패키지·회의 맥락·재배정 그룹)를 반환.
  • 이미 있던 GET /{id}(단순 aggregate=HandoverResponse)는 그대로 두고, 완성돼 있던 GetHandoverPackageUseCase별도 경로로 노출(경로 충돌 없음).
  • 스코프 게이트(assertCanRead: 본인/자기팀/회사)는 기존 get()과 동일 재사용.

2. 작성자 자유서술 note (Flyway V7.7)

  • Figma 신청 화면 "담당 업무 및 인수인계 상세 설명"(핸드오버 1건당 1개) 저장소. PDF 서술부 소스.
  • POST /api/handovers body에 note(선택, ≤5000자) 추가 → 상세 응답 basicInfo.note / HandoverResponse.note로 반환.
  • handover.note TEXT NULL. 기존 행 NULL.

3. 타임라인 막대 시작점 startAt (Flyway V7.8)

  • 상세 타임라인 간트 막대: 오른쪽 끝=deadline(기존), 왼쪽 끝=액션 생성일(신규).
  • 인계 생성 시점에 스냅샷 → handover_item.action_created_at_snap. 상세 응답 items[].startAt(LocalDate).

⚠️ 크로스모듈 (action 팀 확인 요망)

startAt 때문에 공유 아웃포트 ActionReassignPort.HandoverableActionactionCreatedAt 필드를 추가했고, 이를 구현하는 action/infrastructure/adapter/ActionReassignAdapter.java에 1줄(action.getCreatedAt()) 배선했습니다. action 모듈 소유자 확인 부탁드립니다.

마이그레이션 레인

develop이 V7.6(team_name_snap)까지 사용 → 이 PR은 V7.7 / V7.8 사용. (별건: 메터링 PR #207의 V7.6/V7.7은 develop V7.6과 충돌하므로 재번호 예정)

검증

gradlew test --tests "com.module06.backend.handover.*" --tests "com.module06.backend.action.*" --tests "com.module06.backend.BackendApplicationTests"BUILD SUCCESSFUL (컨트롤러 슬라이스·패키지 서비스·도메인/서비스 + 컨텍스트 로드 시 Flyway V7.7/V7.8 H2 적용 포함).

🤖 Generated with Claude Code

Summary by CodeRabbit

  • 새 기능
    • 인수인계 생성 시 최대 5,000자의 메모를 작성하고 상세 정보에서 확인할 수 있습니다.
    • 인수인계 패키지 상세 조회 기능을 제공합니다.
    • 패키지에서 작업, 공백 요약, 맥락 카드, 회의 이력, 재배정 정보를 한눈에 확인할 수 있습니다.
    • 작업 항목의 생성일이 타임라인 시작점으로 표시됩니다.

- GET /api/handovers/{id}/package: 상세 화면용 리치 뷰(액션 타임라인·인계 패키지·회의 맥락)
  노출. 기존 GET /{id}(단순 aggregate)와 별도 경로로 공존. GetHandoverPackageUseCase
  REST 노출 + 스코프 게이트(assertCanRead) 재사용.
- 작성자 자유서술(note): 생성 요청·상세 응답 노출 (Flyway V7.7, handover.note).
  Figma "담당 업무 및 인수인계 상세 설명" 저장소 = PDF 서술부 소스.
- 타임라인 막대 시작점(items[].startAt) = 액션 생성일 스냅샷 (Flyway V7.8,
  handover_item.action_created_at_snap). 아웃포트 HandoverableAction.actionCreatedAt 추가.
  ⚠️ action 모듈 어댑터(ActionReassignAdapter) 1줄 배선 포함 — action 팀 확인 요망.
- 테스트: 패키지 엔드포인트 슬라이스 + note/startAt 검증 + 시그니처 반영. 전부 그린.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 8f4dfedb-0ce8-4ac5-b1e0-05f22d8e38c5

📥 Commits

Reviewing files that changed from the base of the PR and between 5947a3c and 786d7ca.

📒 Files selected for processing (23)
  • src/main/java/com/module06/backend/action/infrastructure/adapter/ActionReassignAdapter.java
  • src/main/java/com/module06/backend/handover/application/command/CreateHandoverCommand.java
  • src/main/java/com/module06/backend/handover/application/port/out/ActionReassignPort.java
  • src/main/java/com/module06/backend/handover/application/service/HandoverPackageService.java
  • src/main/java/com/module06/backend/handover/application/service/HandoverService.java
  • src/main/java/com/module06/backend/handover/application/usecase/GetHandoverPackageUseCase.java
  • src/main/java/com/module06/backend/handover/domain/model/Handover.java
  • src/main/java/com/module06/backend/handover/domain/model/HandoverItem.java
  • src/main/java/com/module06/backend/handover/infrastructure/persistence/HandoverItemJpaEntity.java
  • src/main/java/com/module06/backend/handover/infrastructure/persistence/HandoverJpaEntity.java
  • src/main/java/com/module06/backend/handover/presentation/api/HandoverController.java
  • src/main/java/com/module06/backend/handover/presentation/api/dto/request/CreateHandoverRequest.java
  • src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverItemResponse.java
  • src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverPackageResponse.java
  • src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverResponse.java
  • src/main/resources/db/migration/V7.7__add_note_to_handover.sql
  • src/main/resources/db/migration/V7.8__add_action_created_at_to_handover_item.sql
  • src/test/java/com/module06/backend/handover/application/service/HandoverInsightFinalizeServiceTest.java
  • src/test/java/com/module06/backend/handover/application/service/HandoverListServiceTest.java
  • src/test/java/com/module06/backend/handover/application/service/HandoverPackageServiceTest.java
  • src/test/java/com/module06/backend/handover/application/service/HandoverServiceTest.java
  • src/test/java/com/module06/backend/handover/domain/model/HandoverTest.java
  • src/test/java/com/module06/backend/handover/presentation/api/HandoverControllerTest.java

📝 Walkthrough

Walkthrough

인수인계 메모와 액션 생성 시각 스냅샷을 저장하도록 도메인과 영속 계층을 확장했습니다. 인수인계 패키지 조회 유스케이스와 GET /api/handovers/{id}/package 엔드포인트를 추가했습니다.

Changes

인수인계 메모 저장 흐름

Layer / File(s) Summary
메모 입력과 도메인 전달
src/main/java/com/module06/backend/handover/presentation/api/dto/request/CreateHandoverRequest.java, src/main/java/com/module06/backend/handover/application/command/CreateHandoverCommand.java, src/main/java/com/module06/backend/handover/application/service/HandoverService.java, src/main/java/com/module06/backend/handover/domain/model/Handover.java
요청에 최대 5,000자의 선택적 note를 추가하고 휴가·퇴사 인수인계 생성 흐름에 전달합니다.
메모 영속화와 기존 응답 반영
src/main/java/com/module06/backend/handover/infrastructure/persistence/HandoverJpaEntity.java, src/main/resources/db/migration/V7.7__add_note_to_handover.sql, src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverResponse.java, src/test/java/com/module06/backend/handover/application/service/HandoverServiceTest.java
note를 nullable TEXT 컬럼에 저장하고 복원합니다. 기존 상세 응답과 생성 테스트에 메모를 반영합니다.

액션 생성 시각 스냅샷

Layer / File(s) Summary
액션 데이터와 항목 스냅샷
src/main/java/com/module06/backend/action/infrastructure/adapter/ActionReassignAdapter.java, src/main/java/com/module06/backend/handover/application/port/out/ActionReassignPort.java, src/main/java/com/module06/backend/handover/domain/model/HandoverItem.java, src/main/java/com/module06/backend/handover/application/service/HandoverService.java
액션 생성 시각을 HandoverableAction에서 HandoverItem으로 전달하고 저장합니다.
영속화와 타임라인 변환
src/main/java/com/module06/backend/handover/infrastructure/persistence/HandoverItemJpaEntity.java, src/main/resources/db/migration/V7.8__add_action_created_at_to_handover_item.sql, src/main/java/com/module06/backend/handover/application/service/HandoverPackageService.java, src/main/java/com/module06/backend/handover/application/usecase/GetHandoverPackageUseCase.java, src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverItemResponse.java
action_created_at_snap을 nullable DATETIME 컬럼에 저장합니다. 액션 생성 시각의 날짜를 startAt으로 변환합니다.
관련 테스트 픽스처 검증
src/test/java/com/module06/backend/handover/application/service/HandoverPackageServiceTest.java, src/test/java/com/module06/backend/handover/application/service/HandoverListServiceTest.java, src/test/java/com/module06/backend/handover/application/service/HandoverInsightFinalizeServiceTest.java, src/test/java/com/module06/backend/handover/domain/model/HandoverTest.java, src/test/java/com/module06/backend/handover/application/service/HandoverServiceTest.java
변경된 생성자와 팩토리 호출을 갱신합니다. startAt이 액션 생성 날짜와 일치하는지 검증합니다.

인수인계 패키지 조회 API

Layer / File(s) Summary
패키지 읽기 모델과 응답 매핑
src/main/java/com/module06/backend/handover/application/usecase/GetHandoverPackageUseCase.java, src/main/java/com/module06/backend/handover/application/service/HandoverPackageService.java, src/main/java/com/module06/backend/handover/presentation/api/dto/response/HandoverPackageResponse.java
기본 정보, 공백 요약, 항목, 컨텍스트 카드, 회의 이력, 재배정 그룹을 응답 DTO로 변환합니다.
인증된 패키지 조회 엔드포인트
src/main/java/com/module06/backend/handover/presentation/api/HandoverController.java, src/test/java/com/module06/backend/handover/presentation/api/HandoverControllerTest.java
기존 읽기 권한 검사를 수행한 뒤 현재 날짜를 기준으로 패키지를 조회합니다. 컨트롤러 테스트는 복합 응답과 유스케이스 호출을 검증합니다.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

  • Z-Groupware/BACKEND#34: 인수인계 도메인과 공통 생성 흐름을 도입한 변경입니다.
  • Z-Groupware/BACKEND#71: ActionReassignPort, HandoverService, 패키지 읽기 모델을 직접 확장한 변경입니다.
  • Z-Groupware/BACKEND#128: 액션 재할당 데이터와 인수인계 항목 연계를 수정한 변경입니다.

Suggested labels: enhancement

Suggested reviewers: mosungjin, mnppi223

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 4.05% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 인수인계 상세 패키지 API, 작성자 서술, 타임라인 시작점 추가라는 주요 변경 사항을 명확하게 요약합니다.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch claude/token-metering-e-handoff-dc40c3

Comment @coderabbitai help to get the list of available commands.

@jongjunn jongjunn self-assigned this Aug 7, 2026
@jongjunn jongjunn added the enhancement New feature or request label Aug 7, 2026
@jongjunn jongjunn added this to Z Aug 7, 2026
@github-project-automation github-project-automation Bot moved this to Todo in Z Aug 7, 2026
@jongjunn jongjunn added this to the [M1] BE 기능 개발 milestone Aug 7, 2026

@mosungjin mosungjin left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

확인했습니다.

@mosungjin
mosungjin merged commit b54c754 into develop Aug 7, 2026
9 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in Z Aug 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants