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