# scheduler ## 목적 / 책임 River 기반 task enqueue, worker 실행, task 완료/실패 처리, notification 흐름을 담당한다. ## 포함 경로 - `internal/scheduler/` — River client, worker, job args - `internal/notification/` — task notification 모델과 서비스 ## 제외 경로 - `internal/workflow/` — enqueue 가능 상태 판단 - `internal/storage/` — DB query wrapper - `internal/http/` — API 요청 처리 ## 주요 구성 요소 - `Client` — River client wrapper - `TaskWorker` — task job 실행 worker - `TaskJobArgs` — River job payload - `notification.Service` — task 상태 알림 처리 ## 유지할 패턴 - workflow는 `TaskEnqueuer` 인터페이스로 scheduler를 호출한다. - River migration/start/stop 책임은 scheduler client 안에 둔다. ## 다른 도메인과의 경계 - **workflow**: enqueue 요청과 상태 전이 정책은 workflow가 결정한다. - **persistence**: task 상태 저장은 Store 경계를 통해 수행한다. - **adapters**: 실제 외부 알림 연동은 adapters 도메인과 분리한다. ## 금지 사항 - worker에 HTTP handler 로직을 넣지 않는다. - scheduler에서 SQL query를 직접 호출해 Store 경계를 우회하지 않는다.