refactor(api): unify /api contract across frontend, nginx, and backend
Some checks failed
CI / build-and-test (pull_request) Has been cancelled

This commit is contained in:
Anton
2026-04-08 11:59:46 +03:00
parent 9f63b190f1
commit 8eaf006906
17 changed files with 103 additions and 81 deletions

View File

@@ -1,6 +1,7 @@
import { useEffect, useState } from "react";
import { getBackendMeta } from "../../api";
import { FRONTEND_VERSION } from "../../frontendVersion";
import { readCachedBackendVersion, writeCachedBackendVersion } from "../../lib/backendVersionCache";
function isAbortError(error: unknown): boolean {
return (
@@ -10,7 +11,7 @@ function isAbortError(error: unknown): boolean {
}
export function AppShellFooter(): JSX.Element {
const [backendVersion, setBackendVersion] = useState<string | null>(null);
const [backendVersion, setBackendVersion] = useState<string | null>(() => readCachedBackendVersion());
useEffect(() => {
const ac = new AbortController();
@@ -20,13 +21,24 @@ export function AppShellFooter(): JSX.Element {
return;
}
const v = meta.version;
setBackendVersion(typeof v === "string" && v.length > 0 ? v : "не указана");
const label = typeof v === "string" && v.length > 0 ? v : "не указана";
writeCachedBackendVersion(label);
setBackendVersion(label);
})
.catch((err) => {
if (ac.signal.aborted || isAbortError(err)) {
return;
}
setBackendVersion("недоступна");
setBackendVersion((prev) => {
const cached = readCachedBackendVersion();
if (cached) {
return cached;
}
if (prev !== null) {
return prev;
}
return "недоступна";
});
});
return () => ac.abort();
}, []);