[BE-39] 회사 종속형 수집의 slice 전환 · 완전 수집 마감 보호

작업 내용 (설계 의도)

변경 사항

Greenhouse·Woowahan·Incruit 및 JOBKOREA 회사 종속형 경로를 공통 slice contract로 전환한다. 한 페이지/상세 집합의 저장은 slice별로 가능하지만 applyMissedPostings는 named safe-close predicate(SUCCESS && isComplete && fetchedCount>0)에서만 수행한다. complete-zero SUCCESS는 source health abnormal·closeGuarded이며 마감 델타를 실행하지 않는다. 최초 시딩은 complete SUCCESS 이후에만 markSeeded한다. Incruit detail 요청은 새 slice/daily budget에 맞춘다.

의존

  • BE-33

다이어그램

처리 흐름

sequenceDiagram
    participant D as Dispatcher
    participant A as Company Adapter
    participant C as CycleService
    D->>A: collectSlice()
    A-->>D: postings + complete
    D->>C: persist page
    alt SUCCESS + complete + fetched > 0
        C->>C: apply missed + mark seed
    end

클래스 의존

flowchart LR
    CompanyAdapter --> CollectionSliceDescriptor
    Dispatcher --> JobPostingCollectionDomainService
    CycleService --> JobSourceSeedingDomainService

테스트 케이스

  • incomplete company-bound slice는 신규/변경을 저장해도 missed/closed count를 변경하지 않는다.
  • complete-zero slice는 기존 2회 미발견 마감 규칙을 적용하지 않고 source guard를 남긴다.
  • SUCCESS·complete·fetchedCount>0 slice만 기존 2회 미발견 마감 규칙을 적용한다.
  • 시딩 source는 complete SUCCESS 전에는 seeded_at을 기록하지 않는다.
  • Incruit 상세 요청은 slice와 일일 상세 상한을 넘지 않는다.