52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
import uuid
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class DetectionTaskCreate(BaseModel):
|
|
brand_id: uuid.UUID
|
|
name: str = Field(..., min_length=1, max_length=200)
|
|
frequency: str = Field(..., pattern="^(hourly|daily|weekly)$")
|
|
engines: list[str] = Field(default=[], min_length=1)
|
|
queries: list[str] = Field(default=[], min_length=1)
|
|
competitor_names: Optional[list[str]] = None
|
|
|
|
|
|
class DetectionTaskUpdate(BaseModel):
|
|
name: Optional[str] = Field(None, min_length=1, max_length=200)
|
|
frequency: Optional[str] = Field(None, pattern="^(hourly|daily|weekly)$")
|
|
engines: Optional[list[str]] = None
|
|
queries: Optional[list[str]] = None
|
|
competitor_names: Optional[list[str]] = None
|
|
is_active: Optional[bool] = None
|
|
|
|
|
|
class DetectionTaskResponse(BaseModel):
|
|
id: uuid.UUID
|
|
brand_id: uuid.UUID
|
|
user_id: uuid.UUID
|
|
name: str
|
|
frequency: str
|
|
engines: list[str]
|
|
queries: list[str]
|
|
competitor_names: Optional[list[str]] = None
|
|
is_active: bool
|
|
last_run_at: Optional[datetime] = None
|
|
next_run_at: Optional[datetime] = None
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class DetectionTaskListResponse(BaseModel):
|
|
items: list[DetectionTaskResponse]
|
|
total: int
|
|
|
|
|
|
class DetectionTriggerResponse(BaseModel):
|
|
status: str
|
|
message: Optional[str] = None
|