From 76a30d23af07466ecfd571e7b7bb6724412652c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elisi=C3=A1rio=20Couto?= Date: Mon, 22 Sep 2025 18:43:53 +0100 Subject: [PATCH] feat: Consolidate version display to use health endpoint. --- frontend/src/components/SiteHeader.tsx | 19 +++++-------------- frontend/src/lib/api.ts | 10 +--------- frontend/src/types/api.ts | 1 + leggen/commands/server.py | 16 +++++++--------- 4 files changed, 14 insertions(+), 32 deletions(-) diff --git a/frontend/src/components/SiteHeader.tsx b/frontend/src/components/SiteHeader.tsx index 8494265..d602cfa 100644 --- a/frontend/src/components/SiteHeader.tsx +++ b/frontend/src/components/SiteHeader.tsx @@ -30,16 +30,7 @@ export function SiteHeader() { refetchInterval: 30000, }); - const { - data: versionData, - isLoading: versionLoading, - isError: versionError, - } = useQuery({ - queryKey: ["version"], - queryFn: apiClient.getVersion, - refetchInterval: 5 * 60 * 1000, // Refetch version every 5 minutes - retry: 1, // Only retry once since version is less critical - }); + return (
@@ -56,17 +47,17 @@ export function SiteHeader() {
{/* Version display */}
- {versionLoading ? ( + {healthLoading ? ( v... - ) : versionError || !versionData ? ( + ) : healthError || !healthStatus ? ( v? ) : ( - v{versionData.version} + v{healthStatus.version || "?"} )}
- + {/* Connection status */}
{healthLoading ? ( diff --git a/frontend/src/lib/api.ts b/frontend/src/lib/api.ts index e1c6356..9686ccc 100644 --- a/frontend/src/lib/api.ts +++ b/frontend/src/lib/api.ts @@ -10,7 +10,6 @@ import type { NotificationService, NotificationServicesResponse, HealthData, - VersionData, AccountUpdate, TransactionStats, } from "../types/api"; @@ -168,14 +167,7 @@ export const apiClient = { return response.data.data; }, - // Get version information - getVersion: async (): Promise => { - // Use the root endpoint (/) which provides version information - const response = await api.get("/", { - baseURL: import.meta.env.VITE_API_URL?.replace('/api/v1', '') || '', - }); - return response.data; - }, + // Analytics endpoints getTransactionStats: async (days?: number): Promise => { diff --git a/frontend/src/types/api.ts b/frontend/src/types/api.ts index 1eae3d0..49dad46 100644 --- a/frontend/src/types/api.ts +++ b/frontend/src/types/api.ts @@ -197,6 +197,7 @@ export interface NotificationServicesResponse { export interface HealthData { status: string; config_loaded?: boolean; + version?: string; message?: string; error?: string; } diff --git a/leggen/commands/server.py b/leggen/commands/server.py index e1c2653..413d1a9 100644 --- a/leggen/commands/server.py +++ b/leggen/commands/server.py @@ -82,15 +82,6 @@ def create_app() -> FastAPI: app.include_router(sync.router, prefix="/api/v1", tags=["sync"]) app.include_router(notifications.router, prefix="/api/v1", tags=["notifications"]) - @app.get("/") - async def root(): - # Get version dynamically - try: - version = metadata.version("leggen") - except metadata.PackageNotFoundError: - version = "unknown" - return {"message": "Leggen API is running", "version": version} - @app.get("/api/v1/health") async def health(): """Health check endpoint for API connectivity""" @@ -99,11 +90,18 @@ def create_app() -> FastAPI: config_loaded = config._config is not None + # Get version dynamically + try: + version = metadata.version("leggen") + except metadata.PackageNotFoundError: + version = "dev" + return APIResponse( success=True, data={ "status": "healthy", "config_loaded": config_loaded, + "version": version, "message": "API is running and responsive", }, message="Health check successful",