diff --git a/studspider.py b/studspider.py index d4a60d8..3574315 100644 --- a/studspider.py +++ b/studspider.py @@ -5,6 +5,7 @@ from typing import Dict, Any from fastapi import FastAPI, Request, Response, status from fastapi.responses import JSONResponse import src.get_sq_env as sq_env +import src.stats as stats # Square webhook validation from square.utils.webhooks_helper import verify_signature @@ -40,7 +41,11 @@ async def root(): return { "service": "Studspider", "status": "running", - "endpoints": {"webhook": "/hook (POST)", "health": "/health (GET)"}, + "endpoints": { + "webhook": "/hook (POST)", + "health": "/health (GET)", + "stats": "/stats (GET)", + }, } @@ -55,6 +60,36 @@ async def health_check(): } +@app.get("/stats") +async def get_stats(): + """ + Get daily statistics for LEGO inventory. + + Returns metrics about enrichment progress, missing data, and catalog value. + """ + try: + daily_stats = await stats.get_daily_stats() + + # Calculate completion percentage + if daily_stats["total_items"] > 0: + completion_rate = ( + daily_stats["enriched_items"] / daily_stats["total_items"] * 100 + ) + else: + completion_rate = 0.0 + + return { + "status": "success", + "stats": daily_stats, + "completion_rate": round(completion_rate, 1), + } + except Exception as e: + return JSONResponse( + status_code=500, + content={"status": "error", "message": str(e)}, + ) + + @app.post("/hook") async def webhook_handler(request: Request): """