import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { adminFetch } from './admin-api'; import { useRefreshInterval } from '../use-refresh-interval'; // ── Types ────────────────────────────────────────────────────────────── export interface DatabaseStatus { connected: boolean; version: string | null; host: string | null; schema: string | null; } export interface PoolStats { activeConnections: number; idleConnections: number; threadsAwaitingConnection: number; connectionTimeout: number; maximumPoolSize: number; } export interface TableInfo { tableName: string; rowCount: number; dataSize: string; indexSize: string; dataSizeBytes: number; indexSizeBytes: number; } export interface ActiveQuery { pid: number; durationSeconds: number; state: string; query: string; } // ── Query Hooks ──────────────────────────────────────────────────────── export function useDatabaseStatus() { const refetchInterval = useRefreshInterval(30_000); return useQuery({ queryKey: ['admin', 'database', 'status'], queryFn: () => adminFetch('/database/status'), refetchInterval, }); } export function useConnectionPool() { const refetchInterval = useRefreshInterval(10_000); return useQuery({ queryKey: ['admin', 'database', 'pool'], queryFn: () => adminFetch('/database/pool'), refetchInterval, }); } export function useDatabaseTables() { const refetchInterval = useRefreshInterval(60_000); return useQuery({ queryKey: ['admin', 'database', 'tables'], queryFn: () => adminFetch('/database/tables'), refetchInterval, }); } export function useActiveQueries() { const refetchInterval = useRefreshInterval(5_000); return useQuery({ queryKey: ['admin', 'database', 'queries'], queryFn: () => adminFetch('/database/queries'), refetchInterval, }); } // ── Mutation Hooks ───────────────────────────────────────────────────── export function useKillQuery() { const qc = useQueryClient(); return useMutation({ mutationFn: (pid: number) => adminFetch(`/database/queries/${pid}/kill`, { method: 'POST' }), onSuccess: () => { qc.invalidateQueries({ queryKey: ['admin', 'database', 'queries'] }); }, }); }