| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193 |
- """Repository contracts for the formal acquisition state store."""
- from __future__ import annotations
- from typing import Any, Protocol
- from uuid import UUID
- from acquisition.domain import (
- AcquisitionJob,
- AcquisitionRun,
- CandidateItem,
- ItemClassification,
- MediaAsset,
- Query,
- QueryBatch,
- )
- class AcquisitionRepository(Protocol):
- """Persistence boundary used by acquisition runners and API routes."""
- def create_query_batch(
- self,
- *,
- name: str,
- source_type: str = "manual",
- generation_method: str | None = None,
- target_platforms: list[str] | None = None,
- status: str = "draft",
- metadata: dict[str, Any] | None = None,
- ) -> QueryBatch:
- ...
- def add_query(
- self,
- *,
- batch_id: UUID | None,
- query_text: str,
- axes: dict[str, Any] | None = None,
- keep: bool | None = None,
- filter_reason: str | None = None,
- status: str = "draft",
- sort_order: int = 0,
- metadata: dict[str, Any] | None = None,
- ) -> Query:
- ...
- def list_queries_for_batch(
- self,
- batch_id: UUID,
- *,
- keep: bool | None = None,
- ) -> list[Query]:
- ...
- def get_query_batch(self, batch_id: UUID) -> QueryBatch:
- ...
- def create_acquisition_run(
- self,
- *,
- batch_id: UUID | None = None,
- run_key: str | None = None,
- status: str = "pending",
- note: str | None = None,
- metadata: dict[str, Any] | None = None,
- ) -> AcquisitionRun:
- ...
- def ensure_acquisition_job(
- self,
- *,
- run_id: UUID,
- query_id: UUID | None,
- platform: str,
- search_limit: int | None = None,
- display_limit: int | None = None,
- status: str = "pending",
- metadata: dict[str, Any] | None = None,
- ) -> AcquisitionJob:
- ...
- def update_acquisition_job(
- self,
- job_id: UUID,
- *,
- status: str,
- attempt_count: int | None = None,
- error_message: str | None = None,
- metadata: dict[str, Any] | None = None,
- ) -> AcquisitionJob:
- ...
- def update_acquisition_run(
- self,
- run_id: UUID,
- *,
- status: str,
- error_message: str | None = None,
- metadata: dict[str, Any] | None = None,
- ) -> AcquisitionRun:
- ...
- def upsert_candidate_item(
- self,
- *,
- platform: str,
- job_id: UUID | None = None,
- query_id: UUID | None = None,
- platform_item_id: str | None = None,
- unique_key: str | None = None,
- canonical_url: str | None = None,
- content_type: str | None = None,
- content_mode: str | None = None,
- title: str | None = None,
- author_name: str | None = None,
- body_text: str | None = None,
- raw_summary: str | None = None,
- status: str = "candidate",
- source_payload: dict[str, Any] | None = None,
- metadata: dict[str, Any] | None = None,
- error_message: str | None = None,
- ) -> CandidateItem:
- ...
- def get_candidate_item_by_unique_key(self, unique_key: str) -> CandidateItem | None:
- ...
- def attach_existing_candidate_item(
- self,
- item_id: UUID,
- *,
- job_id: UUID,
- query_id: UUID,
- metadata: dict[str, Any] | None = None,
- ) -> CandidateItem:
- ...
- def add_media_asset(
- self,
- *,
- item_id: UUID,
- media_type: str,
- source_url: str | None = None,
- oss_url: str | None = None,
- cdn_url: str | None = None,
- position: int = 0,
- status: str = "pending",
- source_payload: dict[str, Any] | None = None,
- metadata: dict[str, Any] | None = None,
- ) -> MediaAsset:
- ...
- def add_item_classification(
- self,
- *,
- item_id: UUID,
- is_creation_knowledge: bool | None = None,
- label: str | None = None,
- confidence: float | None = None,
- reason: str | None = None,
- model_name: str | None = None,
- prompt_version: str | None = None,
- result_payload: dict[str, Any] | None = None,
- status: str = "pending",
- error_message: str | None = None,
- ) -> ItemClassification:
- ...
- def get_run_summary(self, run_id: UUID) -> dict[str, Any]:
- ...
- def get_query_detail(self, *, run_id: UUID, query_id: UUID) -> dict[str, Any]:
- ...
- def get_query_detail_for_batch(self, *, batch_id: UUID, query_id: UUID) -> dict[str, Any]:
- ...
- def get_latest_query_result_list(self, query_id: UUID) -> dict[str, Any]:
- ...
- def list_creation_candidate_items(
- self,
- *,
- run_id: UUID | None = None,
- limit: int = 100,
- ) -> list[CandidateItem]:
- ...
- def get_candidate_item(self, item_id: UUID) -> CandidateItem:
- ...
- def list_media_assets_for_item(self, item_id: UUID) -> list[MediaAsset]:
- ...
|