handin-website/backend/app/models.py
2026-03-03 16:16:36 +01:00

109 lines
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"
TEAM = "team"
class Segment(BaseModel):
id: UUID
type: SegmentType
sort_order: int
title: str
content: str = ""
metadata: dict[str, object] = Field(default_factory=dict)
page_id: str | None = None
created_at: datetime
updated_at: datetime
class SegmentCreateRequest(BaseModel):
type: SegmentType
title: str = ""
page_id: str | None = None
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]
page_id: str | None = None
created_at: datetime
updated_at: datetime
class SiteResponse(BaseModel):
title: str
class Page(BaseModel):
id: str
name: str
slug: str
sort_order: int
is_system: bool = False
is_hidden: bool = False
created_at: datetime
updated_at: datetime
class PageCreateRequest(BaseModel):
name: str
slug: str
class PageUpdateRequest(BaseModel):
name: str | None = None
slug: str | None = None
is_hidden: bool | None = None
class PageReorderRequest(BaseModel):
page_ids: list[str]
class TeamMember(BaseModel):
id: str
name: str
student_number: str
sort_order: int
created_at: datetime
updated_at: datetime
class TeamMemberCreateRequest(BaseModel):
name: str
student_number: str
class TeamMemberReorderRequest(BaseModel):
member_ids: list[str]