78 lines
1.9 KiB
Python
78 lines
1.9 KiB
Python
# from __future__ import annotations
|
|
from sqlmodel import Field, Relationship, SQLModel
|
|
from netbrite import Colors, Fonts, Priorities, ScrollSpeeds, Message
|
|
|
|
|
|
# --- Message ---
|
|
class MessageBase(SQLModel):
|
|
activation_delay: int = 0
|
|
display_delay: int = 0
|
|
display_repeat: int = 0
|
|
priority: Priorities = Priorities.OVERRIDE
|
|
text: str = ""
|
|
ttl: int = 0
|
|
|
|
|
|
class MessageDB(MessageBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
zone: "ZoneDB" = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="default_message"
|
|
)
|
|
|
|
|
|
class MessagePublic(MessageBase):
|
|
id: int
|
|
zone: "ZoneDB"
|
|
|
|
|
|
# --- Device ---
|
|
class NetBriteBase(SQLModel):
|
|
address: str = Field(unique=True, index=True)
|
|
port: int = 700
|
|
|
|
|
|
class NetBriteDB(NetBriteBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
zones: list["ZoneDB"] = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="netbrite"
|
|
)
|
|
|
|
|
|
class NetBritePublic(NetBriteBase):
|
|
id: int
|
|
zones: list["ZoneDB"]
|
|
active: bool
|
|
|
|
|
|
# --- Zone ---
|
|
class ZoneBase(SQLModel):
|
|
name: str
|
|
x: int
|
|
y: int
|
|
width: int
|
|
height: int
|
|
scroll_speed: ScrollSpeeds = ScrollSpeeds.NORMAL
|
|
pause_duration: int = 1000
|
|
volume: int = 4
|
|
default_font: Fonts = Fonts.NORMAL_7
|
|
default_color: Colors = Colors.RED
|
|
|
|
default_message_id: int | None = Field(default=None, foreign_key="messagedb.id")
|
|
netbrite_id: int = Field(default=None, foreign_key="netbritedb.id")
|
|
|
|
|
|
class ZoneDB(ZoneBase, table=True):
|
|
id: int | None = Field(default=None, primary_key=True)
|
|
|
|
default_message: MessageDB | None = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="zone"
|
|
)
|
|
netbrite: NetBriteDB = Relationship( # pyright: ignore[reportAny]
|
|
back_populates="zones"
|
|
)
|
|
|
|
|
|
class ZonePublic(ZoneBase):
|
|
id: int
|
|
default_message: MessagePublic
|
|
netbrite: NetBritePublic
|