gitscope
← marzneshin / v0.7.0 / dashboard/src/modules/users/api/queries/user-nodes-usage.query.ts
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/users/api/queries/user-nodes-usage.query.ts · TypeScript
Blame Raw
 1import { useQuery } from "@tanstack/react-query";
 2import { fetch } from "@marzneshin/common/utils";
 3import { UsersQueryFetchKey } from "../..";
 4
 5type UsageMetric = number[];
 6
 7interface NodeUsage {
 8    node_id: number;
 9    node_name: string;
10    usages: Array<UsageMetric>;
11}
12
13export interface UserNodeUsagesResponse {
14    username: string;
15    total: number;
16    node_usages: NodeUsage[];
17}
18
19export interface UserNodeUsagesQueryOptions {
20    username: string;
21    start?: string;
22    end?: string
23}
24
25export type UserNodeUsagesQueryKey = [string, string, { start?: string, end?: string }]
26
27export const UserNodeUsagesDefault = {
28    username: "",
29    node_usages: [],
30    total: 0
31}
32
33export async function fetchUserNodeUsages({ queryKey }: { queryKey: UserNodeUsagesQueryKey }): Promise<UserNodeUsagesResponse> {
34    return await fetch(`/users/${queryKey[1]}/usage`, {
35        query: {
36            start: queryKey[2].start,
37            end: queryKey[2].end
38        }
39    }).then((result) => {
40        return result;
41    });
42}
43
44export const useUserNodeUsagesQuery = ({ username, start, end }: UserNodeUsagesQueryOptions) => {
45    return useQuery({
46        queryKey: [UsersQueryFetchKey, username, { start, end }],
47        queryFn: fetchUserNodeUsages,
48        refetchInterval: 1000 * 60 * 60, // 60min refresh
49        initialData: UserNodeUsagesDefault
50    })
51}