new shems
This commit is contained in:
41
bd/tables/radar_result.py
Normal file
41
bd/tables/radar_result.py
Normal file
@@ -0,0 +1,41 @@
|
||||
"""
|
||||
RadarResult — сохранённый результат прохождения теста в виде значений по осям.
|
||||
RadarResultItem — отдельная ось с итоговым значением внутри результата.
|
||||
"""
|
||||
|
||||
from sqlalchemy import Column, Float, String, DateTime, ForeignKey, UniqueConstraint
|
||||
from sqlalchemy.dialects.postgresql import UUID
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.sql import func
|
||||
from .simple_base import Base
|
||||
import uuid
|
||||
|
||||
|
||||
class RadarResult(Base):
|
||||
"""Итоговый результат (набор баллов по осям) за одно прохождение теста."""
|
||||
__tablename__ = "radar_results"
|
||||
__table_args__ = (UniqueConstraint("response_id", name="uq_radar_response"),)
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
response_id = Column(UUID(as_uuid=True), ForeignKey("responses.id", ondelete="CASCADE"), nullable=False, unique=True)
|
||||
computed_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
|
||||
# Путь к сохранённому SVG-файлу (относительно APP_PATH/data/radar/)
|
||||
image_path = Column(String(512), nullable=True)
|
||||
|
||||
items = relationship("RadarResultItem", backref="result", cascade="all, delete-orphan", passive_deletes=True)
|
||||
|
||||
|
||||
class RadarResultItem(Base):
|
||||
"""Значение по одной оси в рамках результата."""
|
||||
__tablename__ = "radar_result_items"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
result_id = Column(UUID(as_uuid=True), ForeignKey("radar_results.id", ondelete="CASCADE"), nullable=False)
|
||||
dimension_id = Column(UUID(as_uuid=True), ForeignKey("scale_dimensions.id", ondelete="SET NULL"), nullable=True)
|
||||
dimension_name = Column(String(255), nullable=False) # снимок имени на момент расчёта
|
||||
dimension_color = Column(String(32), nullable=True) # снимок цвета
|
||||
dimension_position = Column(Float, nullable=True) # порядок на диаграмме
|
||||
value = Column(Float, nullable=False, default=0.0)
|
||||
|
||||
|
||||
__all__ = ["Base", "RadarResult", "RadarResultItem"]
|
||||
Reference in New Issue
Block a user