47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
from sqlalchemy import Column, String, JSON, ForeignKey
|
|
from sqlalchemy.orm import Mapped, mapped_column
|
|
from app.core.database import Base
|
|
from pydantic import BaseModel
|
|
from typing import List, Optional
|
|
|
|
|
|
# --- Таблицы в БД ---
|
|
|
|
|
|
class DeviceModel(Base):
|
|
__tablename__ = "devices"
|
|
|
|
id: Mapped[str] = mapped_column(String, primary_key=True) # MAC
|
|
ip: Mapped[str] = mapped_column(String)
|
|
name: Mapped[str] = mapped_column(String)
|
|
room: Mapped[str] = mapped_column(String, default="Default")
|
|
|
|
|
|
class GroupModel(Base):
|
|
__tablename__ = "groups"
|
|
|
|
id: Mapped[str] = mapped_column(String, primary_key=True)
|
|
name: Mapped[str] = mapped_column(String)
|
|
device_ids: Mapped[List[str]] = mapped_column(
|
|
JSON
|
|
) # Храним список MAC-адресов как JSON
|
|
|
|
|
|
# --- Pydantic модели для API (оставляем для валидации) ---
|
|
|
|
|
|
class DeviceSchema(BaseModel):
|
|
id: str
|
|
ip: str
|
|
name: str
|
|
room: str
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class GroupCreateSchema(BaseModel):
|
|
id: str
|
|
name: str
|
|
macs: List[str]
|