File size: 1,004 Bytes
1de388a
 
10c4538
e3b7b69
1de388a
 
 
 
30ac2fc
 
 
 
 
1de388a
e3b7b69
30ac2fc
e3b7b69
 
 
 
 
 
 
 
 
30ac2fc
e3b7b69
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import type { Request, RequestHandler } from 'express'
import type { AuthenticatedRequest } from '@llm-router/auth-client'
import { container } from '../loader.js'

function tenantOf(req: Request): string {
  return (req as AuthenticatedRequest).auth!.tenantId
}

function monthOf(req: Request): string | undefined {
  const raw = req.query['month']
  return typeof raw === 'string' && /^\d{4}-(0[1-9]|1[0-2])$/.test(raw) ? raw : undefined
}

export const getSummary: RequestHandler = async (req, res, next) => {
  try {
    res.json(await container.analyticsRepo.getSummary(tenantOf(req), monthOf(req)))
  } catch (err: unknown) {
    next(err)
  }
}

export const getTrends: RequestHandler = async (req, res, next) => {
  try {
    const raw = Number(req.query['months'] ?? 6)
    const months = Number.isFinite(raw) && raw > 0 ? Math.min(Math.floor(raw), 24) : 6
    res.json(await container.analyticsRepo.getTrends(tenantOf(req), months, monthOf(req)))
  } catch (err: unknown) {
    next(err)
  }
}