forked from 0xWheatyz/SPARC
feat: add patent trend charts to the Analytics page
Add GET /analytics/trends endpoint returning per-company analysis counts by month and analysis type distribution over time. Render these as a line chart (analyses per company) and stacked bar chart (analysis types) on the Analytics page using recharts. Closes leeworks-agents/SPARC#24 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -389,6 +389,78 @@ async def get_analytics(
|
||||
)
|
||||
|
||||
|
||||
@app.get("/analytics/trends", tags=["Analytics"])
|
||||
async def get_analytics_trends(
|
||||
days: int = Query(default=90, ge=7, le=365),
|
||||
_: UserResponse = Depends(get_current_user),
|
||||
):
|
||||
"""Get trend data for patent analysis over time.
|
||||
|
||||
Returns two datasets:
|
||||
- ``by_month``: analysis count per company per month
|
||||
- ``by_type_over_time``: analysis type distribution per month
|
||||
|
||||
Args:
|
||||
days: Number of days to look back (default 90)
|
||||
|
||||
Returns:
|
||||
Trend data suitable for time-series and distribution charts
|
||||
"""
|
||||
db = get_db_client()
|
||||
|
||||
with db.get_conn() as conn:
|
||||
with conn.cursor() as cur:
|
||||
# Analyses per company per month
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
TO_CHAR(timestamp, 'YYYY-MM') AS month,
|
||||
company_name,
|
||||
COUNT(*) AS count
|
||||
FROM llm_messages
|
||||
WHERE timestamp >= NOW() - INTERVAL '%s days'
|
||||
AND is_cached = FALSE
|
||||
AND company_name IS NOT NULL
|
||||
GROUP BY month, company_name
|
||||
ORDER BY month
|
||||
""",
|
||||
(days,),
|
||||
)
|
||||
by_month_rows = cur.fetchall()
|
||||
|
||||
# Analysis type distribution per month
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT
|
||||
TO_CHAR(timestamp, 'YYYY-MM') AS month,
|
||||
analysis_type,
|
||||
COUNT(*) AS count
|
||||
FROM llm_messages
|
||||
WHERE timestamp >= NOW() - INTERVAL '%s days'
|
||||
AND is_cached = FALSE
|
||||
GROUP BY month, analysis_type
|
||||
ORDER BY month
|
||||
""",
|
||||
(days,),
|
||||
)
|
||||
by_type_rows = cur.fetchall()
|
||||
|
||||
by_month = [
|
||||
{"month": row[0], "company_name": row[1], "count": row[2]}
|
||||
for row in by_month_rows
|
||||
]
|
||||
by_type_over_time = [
|
||||
{"month": row[0], "analysis_type": row[1], "count": row[2]}
|
||||
for row in by_type_rows
|
||||
]
|
||||
|
||||
return {
|
||||
"by_month": by_month,
|
||||
"by_type_over_time": by_type_over_time,
|
||||
"period_days": days,
|
||||
}
|
||||
|
||||
|
||||
# ============== System Endpoints ==============
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user