Исходный код infrastructure.database.models

from typing import Optional
from sqlalchemy import ( 
    String, 
    Text, 
    ForeignKey, 
    DateTime
)
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.dialects.postgresql import UUID, ENUM
from sqlalchemy.orm import Mapped, mapped_column, relationship
import uuid
from datetime import datetime, timezone

from domain.auth.entities.ticket import TicketType, TicketStatus


Base = declarative_base()


[документация] class DeviceModel(Base): __tablename__ = 'devices' id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4) mac_address: Mapped[str] = mapped_column(String(17), unique=True, index=True, nullable=False) model: Mapped[Optional[str]] = mapped_column(String(100), nullable=True) last_activity: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False ) ip_address: Mapped[Optional[str]] = mapped_column(String(15), nullable=True) config_id: Mapped[uuid.UUID] = mapped_column(UUID, ForeignKey('provision_configs.id'), nullable=False) provision_config = relationship('ProvisionConfigModel', back_populates='devices')
[документация] class ProvisionConfigModel(Base): __tablename__ = 'provision_configs' id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4) config_json: Mapped[str] = mapped_column(Text, nullable=False) config_type: Mapped[str] = mapped_column(String(10), nullable=False) description: Mapped[str] = mapped_column(Text, default="") devices = relationship('DeviceModel', back_populates='provision_config')
[документация] class UserModel(Base): __tablename__ = 'users' id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4) username: Mapped[str] = mapped_column(String(50), unique=True, index=True, nullable=False) hashed_password: Mapped[str] = mapped_column(String(255), nullable=False) is_active: Mapped[bool] = mapped_column(default=True) is_admin: Mapped[bool] = mapped_column(default=False) is_root: Mapped[bool] = mapped_column(default=False)
[документация] class TicketModel(Base): __tablename__ = 'tickets' id: Mapped[uuid.UUID] = mapped_column(UUID, primary_key=True, default=uuid.uuid4) username: Mapped[str] = mapped_column(String(50), ForeignKey('users.username'), nullable=False) ticket_type: Mapped[TicketType] = mapped_column(ENUM(TicketType), nullable=False) status: Mapped[TicketStatus] = mapped_column(ENUM(TicketStatus), nullable=False, default=TicketStatus.IN_PROGRESS) description: Mapped[Optional[str]] = mapped_column(Text, nullable=True) created_at: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc), nullable=False ) resolved_at: Mapped[Optional[datetime]] = mapped_column(DateTime(timezone=True), nullable=True) resolved_by: Mapped[Optional[str]] = mapped_column(String(50), nullable=True) secret: Mapped[Optional[str]] = mapped_column(String(50), nullable=True) secret_hint: Mapped[Optional[str]] = mapped_column(Text, nullable=True)