38 lines
1.9 KiB
Python
38 lines
1.9 KiB
Python
"""
|
|
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"]
|