gitscope
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/modules/users/api/queries/user-nodes-usage.query.ts · v0.6.2
Source
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 }