Scope
라이더 상세 페이지에 교육 이력 섹션을 노출하고, 새 교육 이력 등록 페이지(`/riders/{slug}/education-records/new`) 를 추가한다. 백엔드 Slice C 의 자연스러운 어드민 UI 마무리.
Included:
- service-ops-api 클라이언트에 RiderEducationRecord 타입 + 메소드 (`listRiderEducationRecords`, `createRiderEducationRecord`, `deleteRiderEducationRecord`).
- 라이더 상세 페이지 (`/riders/{slug}`) 에 `교육 이력` 섹션 추가:
- 활성 교육 이력 목록 (최근 정렬, 최대 5건 표시).
- 각 행에 교육 종류 / 완료일 / 만료일 / 수료증 번호 / 발급 기관 노출.
- 만료된 행은 `만료` 뱃지 표시.
- `교육 이력 등록` 버튼.
- `전체 보기` 링크 (옵션, 후속).
- 새 페이지 `/riders/{slug}/education-records/new` — 등록 폼:
- 교육 종류 (ONLINE / OFFLINE) 라디오.
- 과정명, 완료일, 만료일, 수료증 번호, 발급 기관, 증빙 URL, 메모.
- server action 으로 `POST /api/v1/rider-education-records` 호출.
- 라이더 상세 페이지에서 라이더 자체의 education summary (educationCompleted/latestEducationType/educationExpired) 도 노출.
Excluded:
- 교육 이력 단건 상세/수정/삭제 페이지 (후속 슬라이스).
- 라이더 등록/수정 폼 자체에 교육 입력 통합 (운영자가 라이더 등록 후 별도 단계로 등록).
- 라이더 페이지(`/riders`) 의 교육 상태 컬럼 추가 (별도 작업).
- 정부 보고서 PDF 생성.
Acceptance criteria
- 라이더 상세 페이지에 교육 이력 섹션이 노출된다.
- 활성 교육 record 가 0건이면 `등록된 교육 이력 없음` 안내가 보인다.
- `교육 이력 등록` 버튼이 `/riders/{slug}/education-records/new` 로 이동한다.
- 등록 폼이 정상 제출되면 라이더 상세로 돌아오고 새 행이 노출된다.
- 백엔드 미구성 / 세션 없음 시 mock 안내 노출.
- `npm run lint` / `npx tsc --noEmit` / `npm run build` 통과.
Trace
Concurrent work gate
Decision: allowed-with-non-overlap
Evidence:
- Open target issues: none.
- Open target PRs: none.
- Active branches: dev, main.
Reason: front-admin-web 만 변경.
Scope
라이더 상세 페이지에 교육 이력 섹션을 노출하고, 새 교육 이력 등록 페이지(`/riders/{slug}/education-records/new`) 를 추가한다. 백엔드 Slice C 의 자연스러운 어드민 UI 마무리.
Included:
Excluded:
Acceptance criteria
Trace
Concurrent work gate
Decision: allowed-with-non-overlap
Evidence:
Reason: front-admin-web 만 변경.