Make backend start on PostgreSQL
This commit is contained in:
+9
-15
@@ -1,13 +1,16 @@
|
||||
from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime, Text, ARRAY, ForeignKey
|
||||
from sqlalchemy.dialects.postgresql import UUID, JSONB
|
||||
from sqlalchemy.sql import func
|
||||
from sqlalchemy.orm import relationship
|
||||
import uuid
|
||||
from database import Base
|
||||
|
||||
try:
|
||||
from backend.database import Base
|
||||
except ImportError: # pragma: no cover - compatibility for direct module runs
|
||||
from database import Base
|
||||
|
||||
|
||||
class User(Base):
|
||||
"""User model for authentication"""
|
||||
"""User model for authentication."""
|
||||
__tablename__ = "users"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
@@ -22,14 +25,13 @@ class User(Base):
|
||||
|
||||
|
||||
class Case(Base):
|
||||
"""Unified case model - combines search case and result"""
|
||||
"""Unified case model - combines search case and result."""
|
||||
__tablename__ = "cases"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
created_at = Column(DateTime, server_default=func.now())
|
||||
status = Column(String(20), default="active")
|
||||
|
||||
# Ребёнок (Шаг 1)
|
||||
child_name = Column(String(255))
|
||||
age_years = Column(Integer, nullable=False)
|
||||
gender = Column(String(1))
|
||||
@@ -41,18 +43,15 @@ class Case(Base):
|
||||
special_marks = Column(Text)
|
||||
phone_status = Column(String(20))
|
||||
|
||||
# Здоровье (Шаг 2)
|
||||
has_diagnosis = Column(Boolean, default=False)
|
||||
diagnosis_type = Column(ARRAY(String))
|
||||
fitness_level = Column(String(20))
|
||||
has_transport = Column(String(20), default="none")
|
||||
cant_swim = Column(Boolean, default=False)
|
||||
|
||||
# Психотип (Шаг 2б)
|
||||
psychotype = Column(String(50))
|
||||
psychotype_answers = Column(JSONB)
|
||||
|
||||
# Обстоятельства (Шаг 3)
|
||||
loss_reason = Column(String(100))
|
||||
loss_time = Column(DateTime)
|
||||
elapsed_hours = Column(Float)
|
||||
@@ -63,7 +62,6 @@ class Case(Base):
|
||||
familiar_places = Column(Text)
|
||||
lost_before = Column(String(20))
|
||||
|
||||
# Среда (Шаг 4)
|
||||
season = Column(String(20))
|
||||
temperature_c = Column(Float)
|
||||
precipitation = Column(String(20))
|
||||
@@ -71,18 +69,15 @@ class Case(Base):
|
||||
wind = Column(String(20))
|
||||
terrain = Column(ARRAY(String))
|
||||
|
||||
# GPS (Шаг 4)
|
||||
tnp_lat = Column(Float)
|
||||
tnp_lon = Column(Float)
|
||||
tnp_address = Column(Text)
|
||||
|
||||
# Ресурсы (Шаг 5)
|
||||
teams_count = Column(Integer)
|
||||
team_size = Column(Integer)
|
||||
has_dog = Column(Boolean, default=False)
|
||||
extra_resources = Column(ARRAY(String))
|
||||
|
||||
# Исход (заполняется после завершения)
|
||||
found_alive = Column(Boolean)
|
||||
found_distance_km = Column(Float)
|
||||
found_direction = Column(String(10))
|
||||
@@ -92,14 +87,13 @@ class Case(Base):
|
||||
search_duration_hours = Column(Float)
|
||||
who_found = Column(String(50))
|
||||
|
||||
# Мета
|
||||
confidence_avg = Column(Float)
|
||||
raw_text = Column(Text)
|
||||
analysis_log = Column(JSONB)
|
||||
|
||||
|
||||
class AnalysisLog(Base):
|
||||
"""Analysis log for audit and debugging"""
|
||||
"""Analysis log for audit and debugging."""
|
||||
__tablename__ = "analysis_log"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
@@ -115,7 +109,7 @@ class AnalysisLog(Base):
|
||||
|
||||
|
||||
class RawDocument(Base):
|
||||
"""Raw document storage for parsed reports"""
|
||||
"""Raw document storage for parsed reports."""
|
||||
__tablename__ = "raw_documents"
|
||||
|
||||
id = Column(UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
|
||||
|
||||
Reference in New Issue
Block a user