Files
govoplan-dashboard/src/govoplan_dashboard/backend/db/models.py

80 lines
1.8 KiB
Python

from __future__ import annotations
import uuid
from typing import Any
from sqlalchemy import Index, Integer, JSON, String, UniqueConstraint
from sqlalchemy.orm import Mapped, mapped_column
from govoplan_core.db.base import Base, TimestampMixin
def new_uuid() -> str:
return str(uuid.uuid4())
class DashboardLayout(Base, TimestampMixin):
__tablename__ = "dashboard_layouts"
__table_args__ = (
UniqueConstraint(
"tenant_id",
"account_id",
"context_key",
name="uq_dashboard_layouts_actor_context",
),
Index(
"ix_dashboard_layouts_actor",
"tenant_id",
"account_id",
),
)
id: Mapped[str] = mapped_column(
String(36),
primary_key=True,
default=new_uuid,
)
tenant_id: Mapped[str] = mapped_column(
String(36),
nullable=False,
index=True,
)
account_id: Mapped[str] = mapped_column(
String(255),
nullable=False,
index=True,
)
context_key: Mapped[str] = mapped_column(
String(300),
nullable=False,
index=True,
)
view_id: Mapped[str | None] = mapped_column(
String(255),
nullable=True,
index=True,
)
layout_version: Mapped[int] = mapped_column(
Integer,
default=1,
nullable=False,
)
revision: Mapped[int] = mapped_column(
Integer,
default=1,
nullable=False,
)
placements: Mapped[list[dict[str, Any]]] = mapped_column(
JSON,
default=list,
nullable=False,
)
known_widget_ids: Mapped[list[str]] = mapped_column(
JSON,
default=list,
nullable=False,
)
__all__ = ["DashboardLayout", "new_uuid"]