|
|
from fastapi import APIRouter, Depends, HTTPException
|
|
|
from sqlalchemy.orm import Session
|
|
|
from backend.db.session import SessionLocal
|
|
|
from backend.db.models import Universe, Axiom, Theorem
|
|
|
from backend.api.auth import get_api_key
|
|
|
from backend.core.logging_config import get_logger
|
|
|
|
|
|
router = APIRouter()
|
|
|
logger = get_logger("query_routes")
|
|
|
|
|
|
def get_db():
|
|
|
db = SessionLocal()
|
|
|
try:
|
|
|
yield db
|
|
|
finally:
|
|
|
db.close()
|
|
|
|
|
|
@router.get("/query/universe_summary/{universe_id}")
|
|
|
def get_universe_summary(universe_id: int, db: Session = Depends(get_db), api_key: str = Depends(get_api_key)):
|
|
|
try:
|
|
|
universe = db.query(Universe).filter(Universe.id == universe_id).first()
|
|
|
axioms = db.query(Axiom).filter(Axiom.universe_id == universe_id).all()
|
|
|
theorems = db.query(Theorem).filter(Theorem.universe_id == universe_id).all()
|
|
|
logger.info(f"Universe summary for {universe_id} generated.")
|
|
|
return {
|
|
|
"universe": {"id": universe.id, "name": universe.name, "type": universe.universe_type},
|
|
|
"axioms": [ax.statement for ax in axioms],
|
|
|
"theorems": [th.statement for th in theorems],
|
|
|
"axiom_count": len(axioms),
|
|
|
"theorem_count": len(theorems)
|
|
|
}
|
|
|
except Exception as e:
|
|
|
logger.error(f"Query error: {e}")
|
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|
|
|
@router.get("/query/axiom_usage/{axiom_id}")
|
|
|
def get_axiom_usage(axiom_id: int, db: Session = Depends(get_db), api_key: str = Depends(get_api_key)):
|
|
|
try:
|
|
|
axiom = db.query(Axiom).filter(Axiom.id == axiom_id).first()
|
|
|
theorems = db.query(Theorem).filter(Theorem.universe_id == axiom.universe_id).all()
|
|
|
used_in = [th.statement for th in theorems if axiom.statement in th.proof]
|
|
|
logger.info(f"Axiom usage for {axiom_id} generated.")
|
|
|
return {
|
|
|
"axiom": axiom.statement,
|
|
|
"used_in_theorems": used_in,
|
|
|
"usage_count": len(used_in)
|
|
|
}
|
|
|
except Exception as e:
|
|
|
logger.error(f"Query error: {e}")
|
|
|
raise HTTPException(status_code=500, detail=str(e))
|
|
|
|