Files
api-copp/bd/tables/radar_result.py
2026-04-01 14:18:52 +05:00

42 lines
2.2 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
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"]