From 692a086aa5bcd8e2f462f30809e4a6a8f596209c Mon Sep 17 00:00:00 2001 From: Mike Conrad Date: Mon, 19 May 2025 16:32:54 -0400 Subject: [PATCH] Start exposing data via api --- app/controllers/replays_controller.ts | 21 +++++++++++++++++++++ start/routes.ts | 3 ++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/controllers/replays_controller.ts b/app/controllers/replays_controller.ts index a9b002b..0732aff 100644 --- a/app/controllers/replays_controller.ts +++ b/app/controllers/replays_controller.ts @@ -1,11 +1,14 @@ import Replay from '#models/replay' import env from '#start/env' import type { HttpContext } from '@adonisjs/core/http' +import db from '@adonisjs/lucid/services/db' const SENTRY_TOKEN = env.get('SENTRY_TOKEN') const SENTRY_ORG = env.get('SENTRY_ORG') let recordsUpdated = 0 import redis from '@adonisjs/redis/services/main' +import { DateTime } from 'luxon' +const thirtyDaysAgo = DateTime.now().minus({ days: 30 }).toSQL() interface ApiResponse { data: T; @@ -20,6 +23,24 @@ interface SentryPagination { } export default class ReplaysController { + public async search({ response}: HttpContext) { + console.log('thir', thirtyDaysAgo) + let results = await db.rawQuery(`SELECT + "user" ->> 'display_name' AS user_email, + SUM(duration) AS duration, + COUNT(duration) AS sessions, + AVG(duration) AS avg_duration + FROM + replays + WHERE + finished_at >= ? + GROUP BY + user_email + ORDER BY + SUM(duration) desc`, [thirtyDaysAgo] + ) + response.json(results) +} public async list({ request, inertia }: HttpContext) { const page = request.input('page', 1) const perPage = 20 diff --git a/start/routes.ts b/start/routes.ts index 02b6934..a664d0f 100644 --- a/start/routes.ts +++ b/start/routes.ts @@ -12,4 +12,5 @@ import router from '@adonisjs/core/services/router' router.on('/').renderInertia('home') router.get('/replays', [ReplaysController, 'index']) router.get('/list', [ReplaysController, 'list' -]) \ No newline at end of file +]) +router.get('/search', [ReplaysController, 'search']) \ No newline at end of file