import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; import { adminFetch } from './admin-api'; export interface DatabaseStatus { connected: boolean; version: string; host: string; schema: string; } export interface PoolStats { activeConnections: number; idleConnections: number; pendingConnections: number; maxConnections: number; maxWaitMillis: number; } export interface TableInfo { tableName: string; rowEstimate: number; dataSize: string; indexSize: string; } export interface ActiveQuery { pid: number; durationMs: number; state: string; query: string; } export function useDatabaseStatus() { return useQuery({ queryKey: ['admin', 'database', 'status'], queryFn: () => adminFetch('/database/status'), }); } export function useDatabasePool() { return useQuery({ queryKey: ['admin', 'database', 'pool'], queryFn: () => adminFetch('/database/pool'), refetchInterval: 15000, }); } export function useDatabaseTables() { return useQuery({ queryKey: ['admin', 'database', 'tables'], queryFn: () => adminFetch('/database/tables'), }); } export function useDatabaseQueries() { return useQuery({ queryKey: ['admin', 'database', 'queries'], queryFn: () => adminFetch('/database/queries'), refetchInterval: 15000, }); } export function useKillQuery() { const qc = useQueryClient(); return useMutation({ mutationFn: async (pid: number) => { await adminFetch(`/database/queries/${pid}`, { method: 'DELETE' }); }, onSuccess: () => qc.invalidateQueries({ queryKey: ['admin', 'database', 'queries'] }), }); }