presenton/servers/fastapi/api/sql_models.py
2025-05-10 19:57:24 +05:45

56 lines
1.9 KiB
Python

from datetime import datetime
from typing import List, Optional
import uuid
from sqlmodel import SQLModel, Field, Column, JSON
from ppt_generator.models.other_models import SlideType
def get_random_uuid() -> str:
return str(uuid.uuid4())
class PresentationSqlModel(SQLModel, table=True):
id: str = Field(default_factory=get_random_uuid, primary_key=True)
created_at: datetime = Field(default=datetime.now())
prompt: Optional[str] = None
n_slides: int
theme: Optional[dict] = Field(sa_column=Column(JSON, nullable=True), default=None)
file: Optional[str] = None
title: Optional[str] = None
titles: Optional[List[str]] = Field(
sa_column=Column(JSON, nullable=True), default=None
)
language: Optional[str] = None
summary: Optional[str] = None
thumbnail: Optional[str] = None
data: Optional[dict] = Field(sa_column=Column(JSON, nullable=True), default=None)
class SlideSqlModel(SQLModel, table=True):
id: str = Field(default_factory=get_random_uuid, primary_key=True)
index: int = Field(index=True)
type: int
design_index: Optional[int] = None
images: Optional[List[str]] = Field(
sa_column=Column(JSON, nullable=True), default=None
)
icons: Optional[List[str]] = Field(
sa_column=Column(JSON, nullable=True), default=None
)
presentation: str
content: dict = Field(sa_column=Column(JSON, nullable=False), default=None)
properties: Optional[dict] = Field(
sa_column=Column(JSON, nullable=True), default=None
)
class KeyValueSqlModel(SQLModel, table=True):
id: str = Field(default_factory=get_random_uuid, primary_key=True)
key: str = Field(index=True)
value: dict = Field(sa_column=Column(JSON, nullable=True), default=None)
class PreferencesSqlModel(SQLModel, table=True):
id: int = Field(default=0, primary_key=True)
theme: Optional[dict] = Field(sa_column=Column(JSON, nullable=True), default=None)