한 줄 목표
근로자 보안 링크를 발급한 상태와 HR이 외부 채널로 전달 완료한 상태를 구분하여, 새로고침 후에도 업무함이 서류대기와 요청전송을 정확히 표시하도록 합니다.
SENT는 문자·카카오톡 사업자의 실제 수신 보장이 아니라, HR이 "전송 완료"를 기록했다는 뜻입니다.
문제
현재 Server는 링크 발급 여부만 알고 있습니다. 링크를 만들기만 해도 Case 표시 상태가 REQUEST_SENT로 계산되어 다음 두 상황을 구분할 수 없습니다.
- 링크만 발급하고 아직 근로자에게 보내지 않음 → 서류대기
- HR이 링크를 실제로 전달했지만 응답이 없음 → 요청전송
API 범위
GET /api/v1/tasks/{taskId}/worker-link
- 현재 링크 ID, 만료시각,
delivery_status, sent_at 조회
- 원본 token과 전체 URL은 다시 반환하지 않음
POST /api/v1/worker-links/{workerLinkId}/sent
- HR이 링크 전달 완료를 기록
- 서버 시각으로
sent_at, JWT Actor로 sent_by 기록
- 단방향 상태 전이라 반복 호출해도 기존 결과를 반환
링크 발급 응답에도 worker_link_id, delivery_status=NOT_SENT, sent_at=null을 포함합니다.
데이터와 상태
worker_link.delivery_status: NOT_SENT | SENT
worker_link.sent_at: SENT일 때만 값 존재
worker_link.sent_by: 전달 완료를 기록한 HR/ADMIN
- 링크 발급 직후:
NOT_SENT
- 전송 완료 기록 후:
SENT
- 재발급된 링크는 새 링크 기준으로 다시
NOT_SENT
업무함 표시 규칙
- 링크 미발급 또는
NOT_SENT → DOCUMENT_PENDING(서류대기)
- 현재 활성 링크가
SENT이고 근로자 응답 없음 → REQUEST_SENT(요청전송)
- 읽지 않은 근로자 응답 있음 →
REVIEW_REQUIRED(승인대기)
- 업무 완료 →
COMPLETED
보안·감사
- HR/ADMIN만 조회와 전송 완료 기록 가능
company_id 범위로 다른 사업장 링크 접근 차단
- 전송 완료 기록 시 actor, company, workerLink, task, 기록 시각을 감사로그에 남김
- token 원문은 DB·로그·조회 응답에 노출하지 않음
완료 조건
작업 경계와 관계
구현 PR
한 줄 목표
근로자 보안 링크를 발급한 상태와 HR이 외부 채널로 전달 완료한 상태를 구분하여, 새로고침 후에도 업무함이
서류대기와요청전송을 정확히 표시하도록 합니다.문제
현재 Server는 링크 발급 여부만 알고 있습니다. 링크를 만들기만 해도 Case 표시 상태가
REQUEST_SENT로 계산되어 다음 두 상황을 구분할 수 없습니다.API 범위
GET /api/v1/tasks/{taskId}/worker-linkdelivery_status,sent_at조회POST /api/v1/worker-links/{workerLinkId}/sentsent_at, JWT Actor로sent_by기록링크 발급 응답에도
worker_link_id,delivery_status=NOT_SENT,sent_at=null을 포함합니다.데이터와 상태
worker_link.delivery_status:NOT_SENT | SENTworker_link.sent_at:SENT일 때만 값 존재worker_link.sent_by: 전달 완료를 기록한 HR/ADMINNOT_SENTSENTNOT_SENT업무함 표시 규칙
NOT_SENT→DOCUMENT_PENDING(서류대기)SENT이고 근로자 응답 없음 →REQUEST_SENT(요청전송)REVIEW_REQUIRED(승인대기)COMPLETED보안·감사
company_id범위로 다른 사업장 링크 접근 차단완료 조건
NOT_SENT,sent_at=nullSENT,sent_at,sent_by저장sent_at과 동일 결과 반환VIEWER의 변경 요청은 403NOT_SENT와SENT를 구분작업 경계와 관계
main의V30·V31다음인V32를 사용합니다.V33·V34로 조정했으므로 이 이슈의 PR을 먼저 병합합니다.구현 PR