from datetime import datetime from typing import Any from pydantic import BaseModel, ConfigDict, Field class NormalizedScheduleRead(BaseModel): schedule_type: str schedule_config: dict[str, Any] timezone: str next_run_at: datetime display: str class SubscriptionCreate(BaseModel): prompt: str = Field(min_length=1, max_length=8000) schedule: str = Field(min_length=1, max_length=256) class PushSubscriptionRead(BaseModel): model_config = ConfigDict(from_attributes=True) code: str owner_id: int target_type: str target_id: str prompt: str schedule_type: str schedule_config: dict[str, Any] timezone: str next_run_at: datetime | None status: str consented_at: datetime last_run_at: datetime | None created_at: datetime updated_at: datetime class PushDeliveryRead(BaseModel): model_config = ConfigDict(from_attributes=True) code: str subscription_id: int scheduled_for: datetime idempotency_key: str message_uuid: str status: str attempt_count: int next_attempt_at: datetime | None provider_message_id: str | None last_error: str | None sent_at: datetime | None created_at: datetime updated_at: datetime