""" ScaleDimension — ось/сфера радарной диаграммы, привязанная к тесту. ChoiceScore — расшифровка варианта ответа: сколько баллов в какую ось он вносит. """ from sqlalchemy import Column, String, Float, Integer, ForeignKey, Text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.orm import relationship from .simple_base import Base import uuid class ScaleDimension(Base): """Ось/категория радарной диаграммы для конкретного теста.""" __tablename__ = "scale_dimensions" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) poll_id = Column(UUID(as_uuid=True), ForeignKey("polls.id", ondelete="CASCADE"), nullable=False) name = Column(String(255), nullable=False) # напр. "ЗДОРОВЬЕ" description = Column(Text, nullable=True) color = Column(String(32), nullable=True) # напр. "#FF8C00" position = Column(Integer, nullable=True) # порядок на диаграмме scores = relationship("ChoiceScore", backref="dimension", cascade="all, delete-orphan", passive_deletes=True) class ChoiceScore(Base): """Расшифровка: вклад конкретного варианта ответа в конкретную ось.""" __tablename__ = "choice_scores" id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4) choice_id = Column(UUID(as_uuid=True), ForeignKey("choices.id", ondelete="CASCADE"), nullable=False) dimension_id = Column(UUID(as_uuid=True), ForeignKey("scale_dimensions.id", ondelete="CASCADE"), nullable=False) score = Column(Float, nullable=False, default=1.0) # значение, которое добавляется при выборе __all__ = ["Base", "ScaleDimension", "ChoiceScore"]