mirror of
https://github.com/XFox111/bonch-calendar.git
synced 2026-06-30 10:52:41 +03:00
65 lines
1.4 KiB
TypeScript
65 lines
1.4 KiB
TypeScript
const timeout: number = 5000;
|
|
|
|
export const fetchFaculties = (): Promise<Record<string, string>> =>
|
|
fetchApi("/faculties", {});
|
|
|
|
export const fetchGroups = (facultyId: string, year: number): Promise<Record<string, string>> =>
|
|
fetchApi(`/groups?facultyId=${facultyId}&year=${year}`, {});
|
|
|
|
export const fetchStats = async (): Promise<StatsResponse> =>
|
|
fetchApi("/stats", {
|
|
activeUsers: 0
|
|
});
|
|
|
|
export const fetchHealth = async (): Promise<HealthResponse> =>
|
|
fetchApi("/health", {} as HealthResponse, true);
|
|
|
|
async function fetchApi<T>(path: string, defaultValue: T, alwaysReturnResponse: boolean = false): Promise<T>
|
|
{
|
|
try
|
|
{
|
|
const res = await fetch(import.meta.env.VITE_BACKEND_HOST + path, {
|
|
signal: AbortSignal.timeout(timeout)
|
|
});
|
|
|
|
if (!res.ok && !alwaysReturnResponse)
|
|
return defaultValue;
|
|
|
|
return await res.json()
|
|
}
|
|
catch
|
|
{
|
|
return defaultValue;
|
|
}
|
|
}
|
|
|
|
export type StatsResponse =
|
|
{
|
|
activeUsers: number;
|
|
};
|
|
|
|
export type HealthResponse =
|
|
{
|
|
status: ServiceStatus;
|
|
totalDuration: string;
|
|
entries: {
|
|
["timetable_website"]: TimetableHealth;
|
|
};
|
|
};
|
|
|
|
export type ServiceStatus = "Healthy" | "Unhealthy" | "Degraded";
|
|
|
|
export type TimetableHealth =
|
|
{
|
|
description?: string;
|
|
duration: string;
|
|
status: "Healthy" | "Unhealthy",
|
|
tags: unknown[],
|
|
data:
|
|
{
|
|
"/faculties"?: false,
|
|
"/groups"?: string[],
|
|
"/timetable"?: string[];
|
|
};
|
|
};
|