Dama12 commited on
Commit
18482ee
·
1 Parent(s): 4b5fcba

chore: major reliability overhaul - added result_data storage, auto-migrations, and fixed JSON parsing

Browse files
app/db/models/analysis_run.py CHANGED
@@ -1,7 +1,7 @@
1
  """
2
  Database Models for Analysis Runs
3
  """
4
- from sqlalchemy import Column, DateTime, Text, ForeignKey, UUID
5
  from sqlalchemy.orm import relationship
6
  from datetime import datetime
7
  import uuid
@@ -18,6 +18,7 @@ class AnalysisRun(Base):
18
  status = Column(Text)
19
  started_at = Column(DateTime)
20
  completed_at = Column(DateTime)
 
21
 
22
  # Relationships
23
  project = relationship("Project", back_populates="analysis_runs")
 
1
  """
2
  Database Models for Analysis Runs
3
  """
4
+ from sqlalchemy import Column, DateTime, Text, ForeignKey, UUID, JSON
5
  from sqlalchemy.orm import relationship
6
  from datetime import datetime
7
  import uuid
 
18
  status = Column(Text)
19
  started_at = Column(DateTime)
20
  completed_at = Column(DateTime)
21
+ result_data = Column(JSON) # JSON blob for frontend consumption
22
 
23
  # Relationships
24
  project = relationship("Project", back_populates="analysis_runs")
app/main.py CHANGED
@@ -79,6 +79,14 @@ async def lifespan(app: FastAPI):
79
  with engine.connect().execution_options(isolation_level="AUTOCOMMIT") as ddl_conn:
80
  ddl_conn.execute(text("ALTER TABLE research_papers ADD COLUMN summary TEXT"))
81
  logger.info("Added 'summary' column to research_papers table.")
 
 
 
 
 
 
 
 
82
  except Exception as e:
83
  logger.warning(f"Auto-migration warning (non-fatal): {str(e)}")
84
 
 
79
  with engine.connect().execution_options(isolation_level="AUTOCOMMIT") as ddl_conn:
80
  ddl_conn.execute(text("ALTER TABLE research_papers ADD COLUMN summary TEXT"))
81
  logger.info("Added 'summary' column to research_papers table.")
82
+
83
+ # Check if 'result_data' column exists in analysis_runs
84
+ res_res = conn.execute(text("SELECT column_name FROM information_schema.columns WHERE table_name='analysis_runs' AND column_name='result_data'")).fetchone()
85
+ if not res_res:
86
+ with engine.connect().execution_options(isolation_level="AUTOCOMMIT") as ddl_conn:
87
+ # On utilise JSON pour Postgres, ou TEXT comme fallback si besoin
88
+ ddl_conn.execute(text("ALTER TABLE analysis_runs ADD COLUMN result_data JSON"))
89
+ logger.info("Added 'result_data' column to analysis_runs table.")
90
  except Exception as e:
91
  logger.warning(f"Auto-migration warning (non-fatal): {str(e)}")
92
 
app/services/analysis_service.py CHANGED
@@ -43,7 +43,7 @@ class AnalysisService:
43
  analysis.status = status
44
  analysis.completed_at = datetime.utcnow()
45
  if result:
46
- analysis.result_data = json.dumps(result)
47
  self.analysis_repo.db.add(analysis)
48
  self.analysis_repo.db.commit()
49
  self.analysis_repo.db.refresh(analysis)
 
43
  analysis.status = status
44
  analysis.completed_at = datetime.utcnow()
45
  if result:
46
+ analysis.result_data = result # SQLAlchemy handles JSON serialization
47
  self.analysis_repo.db.add(analysis)
48
  self.analysis_repo.db.commit()
49
  self.analysis_repo.db.refresh(analysis)