Álvaro Valenzuela Valdes
deploy: v24 final avatar, localization and HF config hotfix
5e52bd7
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from sqlalchemy import func
from app.database import get_db
from app.models.tender import TenderModel
from app.models.oc import OCModel
from app.models.analysis import AnalysisHistoryModel
from app.services.sync import sync_tenders_to_db, sync_purchase_orders_to_db
from datetime import datetime
router = APIRouter()
@router.get("/admin/db-stats")
def get_detailed_stats(db: Session = Depends(get_db)):
try:
tenders_count = db.query(TenderModel).count()
ocs_count = db.query(OCModel).count()
analysis_count = db.query(AnalysisHistoryModel).count()
# Get top 5 buyers by tender count
top_buyers = db.query(
TenderModel.buyer,
func.count(TenderModel.code).label("count")
).group_by(TenderModel.buyer).order_by(func.count(TenderModel.code).desc()).limit(5).all()
top_buyers_list = [{"name": b[0], "count": b[1]} for b in top_buyers]
# Get last sync date (max of last_updated)
last_tender = db.query(func.max(TenderModel.last_updated)).scalar()
return {
"total_records": tenders_count,
"total_ocs": ocs_count,
"total_analysis": analysis_count,
"top_buyers": top_buyers_list,
"last_sync": last_tender.isoformat() if last_tender else None,
"status": "Healthy"
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
@router.delete("/admin/db-clear")
def clear_database(db: Session = Depends(get_db)):
try:
num_tenders = db.query(TenderModel).delete()
num_ocs = db.query(OCModel).delete()
db.commit()
return {
"message": "Database cleared successfully",
"deleted": {
"tenders": num_tenders,
"purchase_orders": num_ocs
}
}
except Exception as e:
db.rollback()
raise HTTPException(status_code=500, detail=str(e))
@router.post("/admin/sync-all")
async def sync_all_data(db: Session = Depends(get_db)):
try:
tender_results = await sync_tenders_to_db(db)
oc_results = await sync_purchase_orders_to_db(db)
return {
"tenders": tender_results,
"purchase_orders": oc_results,
"timestamp": datetime.utcnow().isoformat()
}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))