134 lines
3.6 KiB
TypeScript
134 lines
3.6 KiB
TypeScript
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
|
|
import { adminService } from "./service";
|
|
import type {
|
|
AdminPaginationParams,
|
|
UpdateSettingDto,
|
|
UpdateUserRoleDto,
|
|
UpdateUserSubscriptionDto,
|
|
} from "./types";
|
|
|
|
export const AdminQueryKeys = {
|
|
all: ["admin"] as const,
|
|
analytics: () => [...AdminQueryKeys.all, "analytics"] as const,
|
|
settings: () => [...AdminQueryKeys.all, "settings"] as const,
|
|
usageLimits: (params?: AdminPaginationParams) =>
|
|
[...AdminQueryKeys.all, "usageLimits", params] as const,
|
|
users: (params?: AdminPaginationParams) =>
|
|
[...AdminQueryKeys.all, "users", params] as const,
|
|
user: (id: string) => [...AdminQueryKeys.all, "user", id] as const,
|
|
};
|
|
|
|
// Analytics
|
|
export const useAdminAnalytics = (enabled = true) => {
|
|
return useQuery({
|
|
queryKey: AdminQueryKeys.analytics(),
|
|
queryFn: () => adminService.getAnalyticsOverview(),
|
|
enabled,
|
|
});
|
|
};
|
|
|
|
// Settings
|
|
export const useAdminSettings = () => {
|
|
return useQuery({
|
|
queryKey: AdminQueryKeys.settings(),
|
|
queryFn: () => adminService.getAllSettings(),
|
|
});
|
|
};
|
|
|
|
export const useUpdateSetting = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: ({ key, dto }: { key: string; dto: UpdateSettingDto }) =>
|
|
adminService.updateSetting(key, dto),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.settings() });
|
|
},
|
|
});
|
|
};
|
|
|
|
// Usage Limits
|
|
export const useAdminUsageLimits = (params?: AdminPaginationParams) => {
|
|
return useQuery({
|
|
queryKey: AdminQueryKeys.usageLimits(params),
|
|
queryFn: () => adminService.getAllUsageLimits(params),
|
|
});
|
|
};
|
|
|
|
export const useResetAllUsageLimits = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: () => adminService.resetAllUsageLimits(),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.usageLimits() });
|
|
},
|
|
});
|
|
};
|
|
|
|
// Users
|
|
export const useAdminUsers = (
|
|
params?: AdminPaginationParams,
|
|
enabled = true,
|
|
) => {
|
|
return useQuery({
|
|
queryKey: AdminQueryKeys.users(params),
|
|
queryFn: () => adminService.getAllUsers(params),
|
|
enabled,
|
|
});
|
|
};
|
|
|
|
export const useAdminUserById = (id: string) => {
|
|
return useQuery({
|
|
queryKey: AdminQueryKeys.user(id),
|
|
queryFn: () => adminService.getUserById(id),
|
|
enabled: !!id,
|
|
});
|
|
};
|
|
|
|
export const useDeleteUser = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: (id: string) => adminService.deleteUser(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.users() });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateUserRole = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: ({ id, dto }: { id: string; dto: UpdateUserRoleDto }) =>
|
|
adminService.updateUserRole(id, dto),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.users() });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useUpdateUserSubscription = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: ({ id, dto }: { id: string; dto: UpdateUserSubscriptionDto }) =>
|
|
adminService.updateUserSubscription(id, dto),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.users() });
|
|
},
|
|
});
|
|
};
|
|
|
|
export const useToggleUserActive = () => {
|
|
const queryClient = useQueryClient();
|
|
|
|
return useMutation({
|
|
mutationFn: (id: string) => adminService.toggleUserActive(id),
|
|
onSuccess: () => {
|
|
queryClient.invalidateQueries({ queryKey: AdminQueryKeys.users() });
|
|
},
|
|
});
|
|
};
|