Files
eventlens/backend/app/schemas.py
T
2026-04-18 14:23:24 +02:00

127 lines
2.9 KiB
Python

from datetime import datetime
from pydantic import BaseModel, ConfigDict, Field
from app.models import (
NotificationStatus,
NotificationType,
ProviderStatusType,
RegionScope,
SourceStatusType,
WatchType,
)
class WatchItemCreate(BaseModel):
name: str = Field(min_length=2, max_length=255)
watch_type: WatchType
region_scope: RegionScope
notes: str | None = None
class WatchItemUpdate(BaseModel):
name: str | None = Field(default=None, min_length=2, max_length=255)
watch_type: WatchType | None = None
region_scope: RegionScope | None = None
notes: str | None = None
is_active: bool | None = None
class WatchItemRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
name: str
watch_type: WatchType
region_scope: RegionScope
notes: str | None
is_active: bool
created_at: datetime
updated_at: datetime
class WatchSourceCreate(BaseModel):
label: str | None = Field(default=None, max_length=255)
url: str = Field(min_length=8, max_length=1024)
parser_type: str = "auto"
class WatchSourceUpdate(BaseModel):
label: str | None = Field(default=None, max_length=255)
url: str | None = Field(default=None, min_length=8, max_length=1024)
parser_type: str | None = None
is_active: bool | None = None
class WatchSourceRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
watch_item_id: int
label: str | None
url: str
parser_type: str
is_active: bool
last_status: SourceStatusType
last_message: str | None
last_checked_at: datetime | None
created_at: datetime
updated_at: datetime
class PurchaseUpdate(BaseModel):
is_ticket_purchased: bool
class TrackedEventRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
watch_item_id: int
source: str
external_id: str
title: str
matched_term: str
venue_name: str | None
city: str | None
country_code: str | None
event_date: datetime | None
ticket_url: str | None
image_url: str | None
is_ticket_purchased: bool
purchased_at: datetime | None
discovery_notified_at: datetime | None
reminder_notified_at: datetime | None
first_seen_at: datetime
last_seen_at: datetime
class NotificationLogRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
tracked_event_id: int
notification_type: NotificationType
status: NotificationStatus
message: str
created_at: datetime
class SyncResult(BaseModel):
scanned_watch_items: int
new_events: int
updated_events: int
notifications_sent: int
notifications_skipped: int
class ProviderStatusRead(BaseModel):
model_config = ConfigDict(from_attributes=True)
id: int
provider_name: str
status: ProviderStatusType
message: str
last_checked_at: datetime
last_success_at: datetime | None