# 작업 요청 게시판

## 목적

작업 요청 게시판은 게시글 1건 안에 여러 하위 요청을 묶어 등록하고, 각 하위 요청이 자동화 작업으로 어떻게 접수되고 완료되는지 추적하는 화면입니다.

## 핵심 구조

- 게시글 1건은 공통 제목, 공통 메모, 공통 첨부 파일을 가집니다.
- 게시글 안에는 하위 요청을 1건 이상 둘 수 있습니다.
- 각 하위 요청은 별도 Plan 항목으로 등록될 수 있고, 상태도 개별로 추적됩니다.
- 공통 메모와 첨부 파일 경로는 하위 요청별 자동화 메모에 함께 포함됩니다.

## 데이터 모델

- 게시글 테이블: `board_posts`
- 하위 요청 테이블: `board_post_requests`
- 주요 서버 구현:
  - 라우트: `etc/servers/work-server/src/routes/board.ts`
  - 서비스: `etc/servers/work-server/src/services/board-service.ts`
- 주요 프런트 구현:
  - 화면: `src/features/board/BoardPage.tsx`
  - API 클라이언트: `src/features/board/api.ts`
  - 타입: `src/features/board/types.ts`

## 실행 방식

하위 요청 등록 방식은 게시글 단위로 선택합니다.

- `all_at_once`: 접수 가능한 하위 요청을 한 번에 모두 Plan으로 등록합니다.
- `after_previous_finished`: 앞 요청이 성공/실패와 무관하게 종료되면 다음 요청을 등록합니다.
- `after_previous_success`: 앞 요청이 성공으로 완료된 경우에만 다음 요청을 등록합니다. 실패하면 뒤 요청은 `blocked` 상태로 남습니다.

## 상태 추적

각 하위 요청은 아래 정보를 기준으로 상태를 계산합니다.

- 게시판 워크플로 상태: `pending`, `waiting`, `registered`, `completed`, `failed`, `blocked`
- 연결된 Plan 상태: `status`, `workerStatus`, `lastError`

화면에서는 이를 바탕으로 다음처럼 보여줍니다.

- `미접수`: 아직 Plan 등록 전
- `선행 대기`: 순차 실행에서 앞 요청 완료를 기다리는 상태
- `대기열`: Plan 등록은 됐지만 아직 본격 처리 전
- `진행중`: worker가 작업 중
- `완료`: Plan 완료 반영
- `실패`: worker 실패 또는 오류 기록 존재
- `차단`: 성공 의존 순차 모드에서 앞 요청 실패로 후속 요청 중단

## 화면 동작

- 목록 화면에서 게시글별로 `완료 x/y`, 실패 수, 진행 수를 요약해 보여줍니다.
- 상세 화면에서 하위 요청을 추가, 삭제, 순서 변경할 수 있습니다.
- 자동화 접수 후에는 게시글과 하위 요청 편집이 잠기고 읽기 전용으로 전환됩니다.
- 하위 요청별로 연결된 Plan 링크를 바로 열 수 있습니다.
- 여러 게시글을 선택해 일괄 접수할 수 있지만, 실제 순차 흐름은 각 게시글의 실행 옵션을 따릅니다.

## 자동화 연동

- 접수 시 `receiveBoardPostAutomation()`이 하위 요청별 Plan을 생성합니다.
- Plan worker가 완료/실패를 기록하면 `progressBoardPostAutomationByPlanResult()`가 다음 하위 요청 등록 여부를 결정합니다.
- 레거시 호환용 `board_posts.automation_plan_item_id`, `automation_received_at`도 첫 접수 요청 기준으로 함께 동기화합니다.

## 검증 포인트

- 새 게시글 저장 시 하위 요청이 1건 이상 생성되는지 확인
- 실행 옵션별로 다음 요청 등록 시점이 의도대로 달라지는지 확인
- 앞 요청 실패 시 `after_previous_success` 모드에서 후속 요청이 `차단`으로 남는지 확인
- 자동화 접수 후 편집/삭제가 막히는지 확인
- 하위 요청별 Plan 링크가 올바른 항목으로 연결되는지 확인
