Skip to content

[Case] 업무함 Case·Workflow Snapshot 조회 구현 - #88

Merged
hywznn merged 4 commits into
mainfrom
feat/83-case-projection
Aug 5, 2026
Merged

[Case] 업무함 Case·Workflow Snapshot 조회 구현#88
hywznn merged 4 commits into
mainfrom
feat/83-case-projection

Conversation

@hywznn

@hywznn hywznn commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

한 줄 요약

업무함에서 Case별 진행률·문서 준비도·현재 처리할 Task를 안정적으로 조회할 수 있도록 Case 저장·조회 기반을 구현합니다.


사용자 흐름

  1. HR이 수동 Task를 생성합니다.
  2. Server가 같은 트랜잭션에서 단일 Task Case를 함께 생성합니다.
  3. 업무함에서 Case 목록과 진행 상태를 조회합니다.
  4. Case 상세에서 Workflow 순서에 맞는 현재 Task와 준비도를 확인합니다.

API 변경

API 설명
GET /api/v1/cases 로그인한 사업장의 Case 목록과 진행 상태를 조회합니다.
GET /api/v1/cases/{caseId}/projection Case의 Task 목록, 현재 Task, 진행률, 문서·승인·응답 준비도를 조회합니다.
POST /api/v1/tasks 수동 Task 생성 시 단일 Task Case도 같은 트랜잭션에서 생성합니다.

지정한 Case가 이미 존재하면 같은 근로자의 Case일 때만 재사용합니다. 다른 근로자의 Case를 지정하면 409 Conflict로 차단합니다.


화면 표시 기준

표시 상태 의미
DOCUMENT_PENDING 근로자 링크를 보내기 전, 서류 준비가 필요한 상태
REQUEST_SENT 근로자에게 요청을 보냈지만 아직 응답이 없는 상태
REVIEW_REQUIRED 근로자 응답 또는 HR 검토·승인이 필요한 상태
COMPLETED Case의 업무가 완료된 상태
CANCELLED Case가 취소된 상태

현재 Task는 단순히 마감일이 빠른 Task가 아니라 다음 기준으로 선택합니다.

  1. Workflow Snapshot의 steps.order
  2. depends_on_task_id로 지정된 선행 Task 완료 여부
  3. Snapshot에 없는 Task만 마감일과 Task ID 순서 사용

DB·보안

  • V18: workflow_case와 Workflow Snapshot 저장 구조
  • V19: PostgreSQL 전용 pl_workflow_case_tenant_isolation RLS 정책
  • 다른 사업장의 Case는 ID를 알고 있어도 404 Not Found 처리
  • Case 목록은 마지막에 case_id까지 정렬하여 페이지 이동 시 중복·누락 방지
  • Checklist, Document, Approval, Worker Response, Evidence 집계 결과를 readiness로 제공

데모 데이터 정합성

  • 기존 Demo Task의 case_id를 실제 workflow_case와 연결
  • Workflow Snapshot에 candidate_order, 승인 조건, 의존성, 누락 조건 저장
  • Demo Document를 담당 Task와 연결
  • 대표 복합 Case 결과
    • 표시 상태: REVIEW_REQUIRED
    • 현재 Task: 1단계 재계약 조건 확인
    • 문서 준비도: 확인 2 / 전체 3

이번 PR에서 하지 않는 일

  • 별도 POST /cases API는 만들지 않습니다.
  • AI candidate에서 여러 Task를 한 Case로 생성하는 흐름은 #24에서 연결합니다.
  • 기존 Task와 workflow_case 사이의 DB FK 추가는 후속 migration으로 검토합니다.
  • Worker Link의 정확한 읽음 여부는 read_at 도입 전까지 응답 존재 여부와 NEEDS_FOLLOWUP 상태를 함께 사용합니다.

검증 결과

  • ./gradlew clean test
  • 수동 Task 생성 후 Case Projection 조회
  • Demo 복합 Case의 문서 준비도 2 / 3
  • Workflow 순서 기반 현재 Task 선택
  • Case 목록·상세·진행률·취소 상태·고정 페이지 정렬
  • 타 사업장 Case 접근 시 404
  • Workflow Snapshot 순서·허용 조건 검증
  • Swagger/OpenAPI 문서 생성
  • PostgreSQL 17 migration·RLS 격리

@hywznn

hywznn commented Aug 5, 2026

Copy link
Copy Markdown
Contributor Author

PR #88은 쉽게 말하면 여러 업무카드를 하나의 업무 묶음(Case)으로 보여주는 기능

@hywznn
hywznn marked this pull request as ready for review August 5, 2026 07:20

@krestar krestar 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.

Demo Document가 workerId + DocumentType 기준으로 관련 Task를 찾아 taskId를 저장하도록 변경된 점 확인했습니다.
기존 task_id = NULL 데이터의 재실행 보정과 JPA 반영, 통합 테스트까지 포함되어 있는 것도 확인했습니당.
Demo Seed 정합성 문제는 해결될 것 같네요

@hywznn
hywznn merged commit fe2e3e3 into main Aug 5, 2026
4 checks passed
@hywznn
hywznn deleted the feat/83-case-projection branch August 5, 2026 08:40
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.

3 participants