← back to Ken

src/app/api/dashboard/route.js

29 lines

import { NextResponse } from 'next/server';
const { query } = require('../../../lib/db');

export const dynamic = 'force-dynamic';

export async function GET() {
  try {
    const [markets, weatherMarkets, forecasts, predictions, trades, alerts] = await Promise.all([
      query('SELECT COUNT(*) as cnt FROM markets'),
      query("SELECT COUNT(*) as cnt FROM markets WHERE category = 'weather' OR parsed_event IS NOT NULL"),
      query('SELECT COUNT(*) as cnt FROM forecast_runs'),
      query('SELECT * FROM predictions ORDER BY asof_ts DESC LIMIT 10'),
      query('SELECT t.*, o.side, o.outcome FROM trades t LEFT JOIN orders o ON t.order_id = o.order_id ORDER BY t.match_time DESC NULLS LAST LIMIT 10'),
      query("SELECT * FROM alerts_log ORDER BY ts DESC LIMIT 5"),
    ]);

    return NextResponse.json({
      market_count: parseInt(markets.rows[0]?.cnt || 0),
      weather_market_count: parseInt(weatherMarkets.rows[0]?.cnt || 0),
      forecast_count: parseInt(forecasts.rows[0]?.cnt || 0),
      recent_predictions: predictions.rows,
      recent_trades: trades.rows,
      recent_alerts: alerts.rows,
    });
  } catch (err) {
    return NextResponse.json({ error: err.message }, { status: 500 });
  }
}