32 lines
1020 B
TypeScript
32 lines
1020 B
TypeScript
import { NextResponse } from 'next/server';
|
|
import db from '@/lib/db';
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
type Params = { params: Promise<{ id: string }> };
|
|
|
|
export async function GET(_req: Request, { params }: Params) {
|
|
const { id } = await params;
|
|
const counter = db.prepare('SELECT * FROM counters WHERE id = ?').get(Number(id));
|
|
if (!counter) return NextResponse.json({ error: 'Not found' }, { status: 404 });
|
|
|
|
const cutoff = Date.now() - 365 * 24 * 60 * 60 * 1000;
|
|
|
|
const dailyActivity = db.prepare(`
|
|
SELECT
|
|
date(created_at / 1000, 'unixepoch', 'localtime') AS date,
|
|
SUM(delta) AS value
|
|
FROM events
|
|
WHERE counter_id = ? AND created_at >= ?
|
|
GROUP BY date
|
|
HAVING SUM(delta) > 0
|
|
ORDER BY date ASC
|
|
`).all(Number(id), cutoff);
|
|
|
|
const allTimeTotal = (db.prepare(
|
|
'SELECT COALESCE(SUM(delta), 0) AS total FROM events WHERE counter_id = ?'
|
|
).get(Number(id)) as { total: number }).total;
|
|
|
|
return NextResponse.json({ counter, dailyActivity, allTimeTotal });
|
|
}
|