feat: 근로자 기본정보·서류 메타데이터 API 구현 - #40
Merged
Merged
Conversation
Contributor
|
#40 Worker 스키마 확정 및 병합 이렇게 갑시다 원래 #40 에서 해결하려던 이슈가 먼저이기 때문에 여기 기준으로 Worker스키마를 확정 지은 다음에 제가 v4에 적용해서 맞춰 머지하겠습니다 ! work_status vs employment_status => 사실 별 의미 차이는 없으니 work_status로 하고 제가 수정할게요 visa_expiry_date vs stay_expiry_date => stay_expiry_date | 비자만료냐 체류만료냐인데 이건 ERD나 서비스 내용을 고려했을 때 stay_expiry_date가 맞을 것 같습니다 => 수정이 많이 필요할까요? nationality vs nationality_code => nationality_code | 나중에 국적 이니셜로 넣기에 이게 편할 것 같아요 RESIGNED vs TERMINATED => 일단 자발적 퇴사라고 해석될 수 있는 RESIGNED를 넣는걸로해서 저도 추가해놓겠습니다 조금 많아진 것 같긴하지만 |
hywznn
previously approved these changes
Jul 24, 2026
Contributor
Author
|
말씀해주신 4가지 확인 후 |
hywznn
marked this pull request as ready for review
July 24, 2026 01:59
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
This was referenced Jul 24, 2026
Merged
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
* feat(worker): Workflow 참조용 Worker core schema 추가 * feat(task): 승인 연동용 Task 상태 전이 core 추가 * feat(approval): 승인·감사 저장 모델 추가 승인 스냅샷, 외부 제출, 증빙, 감사 이벤트를 V5 마이그레이션과 JPA 저장소로 구성합니다. 사업장 범위 외래키와 상태·버전 제약을 추가하고 감사 이벤트는 일반 수정·삭제 경로 없이 append 방식으로만 기록합니다. * feat(approval): 승인 흐름과 감사 조회 API 구현 승인 요청·승인·반려·외부 제출·증빙·완료 command를 상태 전이와 같은 transaction에서 처리합니다. 민감정보를 차단하는 snapshot 검증과 fingerprint, request/trace 감사 기록, 사업장 범위 활동 이력과 ADMIN cursor 검색 API를 추가합니다. * fix(approval): 승인 revision 계약을 ADR과 정렬 JPA 동시성 version과 승인 대상 내용의 content_revision을 분리합니다. 승인은 content revision과 핵심값 fingerprint가 모두 일치할 때만 재사용하고, 중요값 변경 시 revision을 증가시켜 기존 승인을 무효화합니다. ADR-0003에 맞춰 외부 제출과 완료의 허용 상태도 보정합니다. * fix(api): 승인 API 계약을 ADR과 정렬 요청·응답 필드를 명시적인 snake_case 계약으로 고정하고 보호 API의 401·403 및 409·422 오류를 OpenAPI에 문서화합니다. Task 상태 전이와 동시성 오류 코드를 Accepted ADR의 안정적인 코드로 통일합니다. * test(approval): 승인·감사 보안 시나리오 검증 정상 승인·반려 기반 상태 전이, 민감정보 유입 시 transaction rollback, 역할·사업장 격리, stale version, cursor pagination을 HTTP 통합 테스트로 검증합니다. PostgreSQL migration 계약에도 Worker·Task·Approval·Audit schema와 tenant-aware FK를 추가합니다. * docs(approval): 승인·감사 사용 흐름 안내 현재 구현 API와 migration 목록을 갱신하고 승인 snapshot, version·revision 구분, 역할·감사 조회 규칙을 초보자도 따라갈 수 있게 설명합니다. * test(approval): 반려와 감사 실패 rollback 보강 반려된 승인 요청의 재사용 차단, 외부 제출 reference 누락 시 상태 보존, 감사 이벤트 저장 실패 시 Task·Approval·전이 이력 전체 rollback을 통합 테스트합니다. * test(approval): 동시 승인 경쟁 검증 동일 Task version에 대한 두 승인 요청을 동시에 실행해 하나만 성공하고 다른 요청은 409로 차단되며 승인·감사 기록도 하나만 남는지 반복 검증합니다. * test(db): PostgreSQL Task fixture 필수 시각 보완 PostgreSQL migration 계약 테스트의 Task INSERT에 필수 created_at·updated_at을 명시해 실제 V4 NOT NULL 제약과 일치시킵니다. * fix(approval): 필수정보 검증을 서버 책임으로 이동 Client가 requirements_satisfied 값을 보내는 계약을 제거하고 Task 상태와 미완료 필수 체크리스트를 서버가 직접 조회해 승인 검토 가능 여부를 판단합니다. 필수 체크리스트가 남은 Task는 승인 요청·상태 전이·감사 기록이 생성되지 않는 통합 테스트를 추가합니다. * fix(db): #40 Worker 스키마와 승인 테스트 정합성 반영 * fix(approval): 중복 승인 시 버전 충돌을 우선 반환
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
hywznn
added a commit
that referenced
this pull request
Jul 24, 2026
* feat(workflow): Knowledge Catalog 투영본 연결 Knowledge 저장소의 Workflow 정의를 Server용 read-only projection으로 검증하고 로드합니다. 운영 환경에서는 RELEASED bundle만 허용하고 Task 유형, 필수 slot, checklist, 출처 version을 고정합니다. * feat(task): 업무카드와 체크리스트 실행 규칙 구현 Worker 최소 조회 경계, tenant 범위 Repository, required slot 평가, 낙관적 잠금과 상태 전이를 연결합니다. 중요값 또는 필수 checklist 변경 시 승인 snapshot을 무효화하고 Audit·Transition을 같은 transaction에 기록합니다. * feat(api): Task Workflow 7개 API 공개 Workflow Catalog와 Task 목록·생성·상세·수정·checklist·취소 endpoint를 /api/v1 계약으로 제공합니다. snake_case, JWT role, company 격리, expected_version과 409·422 오류 계약을 OpenAPI에 반영합니다. * test(task): 권한·격리·상태·동시성 시나리오 검증 7개 API 흐름, 타 사업장 은닉, Viewer 쓰기 차단, 민감정보 거부와 승인 무효화를 통합 테스트합니다. 동시 수정은 하나만 성공하고 OpenAPI version·snake_case 계약이 유지되는지 검증합니다. * fix(task): 승인 후 중요값 수정 계약을 ADR과 정렬 필수정보와 checklist가 충분하면 기존 승인을 무효화한 뒤 수정본 snapshot을 새로 만들고 READY_FOR_REVIEW로 전환합니다. 문서 종류·상태 metadata는 허용하되 여권번호 등 실제 민감 식별값은 계속 차단합니다. * docs(task): 업무카드 개발·운영 흐름 문서화 7개 Task Workflow API, expected_version, 승인 무효화와 Knowledge projection 운영 방법을 README와 환경변수 예시에 추가합니다. Conventional Commits의 type·scope는 영문으로 유지하고 설명은 한국어로 작성하도록 기여 규칙을 맞춥니다. * fix(task): #40 Worker 상태 계약과 업무 생성 조건 정렬
This was referenced Jul 24, 2026
25 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
왜 필요한가요?
Refs #5
#5 이슈의 근로자 기본정보·서류 메타데이터 API 6개 중 5개(목록 조회 제외)를 구현합니다.
HR이 자신의 사업장 근로자를 안전하게 등록·조회·수정하고, 서류 제출 상태를 관리할 수 있어야 합니다.
V3migration 스키마는 PR #37 리뷰에서 조율 완료했습니다 (work_status, stay_expiry_date, nationality_code, RESIGNED 확정 — be90ff1). #37은 이 PR의 스키마를 기준으로 V4에 맞춰 rebase 예정입니다.무엇이 바뀌나요?
Worker,WorkerDocument도메인/JpaEntity,V3__create_worker_document.sqlmigration 추가 (번호 재조정 가능성 있음)POST/GET/PATCH /api/v1/workers,POST/PATCH /api/v1/workers/{workerId}/documents5개 API 구현WorkerStatus(기존),DocumentType,SubmissionStatusEnum 추가WorkerErrorCode(404/409) 추가ADMIN/HR은 쓰기,ADMIN/HR/VIEWER는 조회 가능하도록@PreAuthorize적용,ActorContext로 사업장 격리어떻게 검증했나요?
./gradlew clean test./gradlew build/health와 Swagger UI 확인 (로컬 bootRun으로 직접 확인)expected_version충돌 시 409)WorkerSecurityIntegrationTest(5개),WorkerDocumentSecurityIntegrationTest(5개) 전체 통과.1. 등록→조회 정상 흐름 + 민감정보 미포함 확인
2. PATCH가 보낸 필드만 바꾸고 version이 0→1로 오르는지
3. 오래된 expected_version으로 PATCH하면 409
4. 타 사업장 근로자 조회 시 404
5. 계약기간 역전 시 400 VALIDATION_FAILED
보안·개인정보
company_id범위를 검사합니다.API·DB·운영 영향
리뷰에서 중점 확인할 부분
V3충돌 조율 결과 → 해결 완료 (be90ff1)이번 PR에서 하지 않은 것
worker_sensitive_data관련GET /workers목록 필터