from pydantic import AwareDatetime, BaseModel, PastDatetime from app.fandata.enums import FanCollectionStatus, FanCredentialsStatus class Fan(BaseModel): dsp_user_id: str dsp_id: str token_status: FanCredentialsStatus first_seen_at: AwareDatetime last_collected_at: AwareDatetime | None = None last_collection_status: FanCollectionStatus | None = None consecutive_failures: int = 0 dsp_client_id: int | None = None dsp_client_name: str | None = None class FanPaginated(BaseModel): items: list[Fan] total: int class FanCredentialsCount(BaseModel): count: int class GetFanCredentialsInput(BaseModel): dsp_client_id: int token_status: FanCredentialsStatus | None = FanCredentialsStatus.active not_collected_since: PastDatetime | None = None max_consecutive_failures: int | None = None limit: int | None = None class CollectionActivityDay(BaseModel): date: str success: int errors: int throttled: int = 0