62 lines
1.2 KiB
Python
62 lines
1.2 KiB
Python
from datetime import datetime
|
|
from enum import StrEnum
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
|
|
class SegmentType(StrEnum):
|
|
MARKDOWN = "markdown"
|
|
PDF = "pdf"
|
|
VIDEO = "video"
|
|
AUDIO = "audio"
|
|
IFRAME = "iframe"
|
|
GALLERY = "gallery"
|
|
LINK = "link"
|
|
|
|
|
|
class Segment(BaseModel):
|
|
id: UUID
|
|
type: SegmentType
|
|
sort_order: int
|
|
title: str
|
|
content: str = ""
|
|
metadata: dict[str, object] = Field(default_factory=dict)
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class SegmentCreateRequest(BaseModel):
|
|
type: SegmentType
|
|
title: str
|
|
content: str = ""
|
|
metadata: dict[str, object] = Field(default_factory=dict)
|
|
|
|
|
|
class SegmentUpdateRequest(BaseModel):
|
|
title: str | None = None
|
|
content: str | None = None
|
|
metadata: dict[str, object] | None = None
|
|
|
|
|
|
class ReorderRequest(BaseModel):
|
|
segment_ids: list[UUID]
|
|
|
|
|
|
class SiteUpdateRequest(BaseModel):
|
|
title: str
|
|
|
|
|
|
class SegmentResponse(BaseModel):
|
|
id: UUID
|
|
type: SegmentType
|
|
sort_order: int
|
|
title: str
|
|
content: str
|
|
metadata: dict[str, object]
|
|
created_at: datetime
|
|
updated_at: datetime
|
|
|
|
|
|
class SiteResponse(BaseModel):
|
|
title: str
|