TTMT.ManageWebGUI/src/hooks/queries/usePermissionQueries.ts

91 lines
2.5 KiB
TypeScript

import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import * as permissionService from "@/services/permission.service";
export const PERMISSION_QUERY_KEYS = {
all: ["permissions"] as const,
list: () => [...PERMISSION_QUERY_KEYS.all, "list"] as const,
dbList: () => [...PERMISSION_QUERY_KEYS.all, "db-list"] as const,
byCategory: () => [...PERMISSION_QUERY_KEYS.all, "by-category"] as const,
detail: (value: number) => [...PERMISSION_QUERY_KEYS.all, "detail", value] as const,
};
/**
* Hook để lấy danh sách permission từ enum
*/
export function useGetPermissionList(enabled = true) {
return useQuery({
queryKey: PERMISSION_QUERY_KEYS.list(),
queryFn: () => permissionService.getPermissionList(),
enabled,
staleTime: 10 * 60 * 1000, // 10 minutes
});
}
/**
* Hook để lấy permission theo category
*/
export function useGetPermissionByCategory(enabled = true) {
return useQuery({
queryKey: PERMISSION_QUERY_KEYS.byCategory(),
queryFn: () => permissionService.getPermissionByCategory(),
enabled,
staleTime: 10 * 60 * 1000, // 10 minutes
});
}
/**
* Hook để lấy chi tiết permission theo value
*/
export function useGetPermissionByValue(value: number, enabled = true) {
return useQuery({
queryKey: PERMISSION_QUERY_KEYS.detail(value),
queryFn: () => permissionService.getPermissionByValue(value),
enabled: enabled && value > 0,
staleTime: 10 * 60 * 1000, // 10 minutes
});
}
/**
* Hook để lấy danh sách permission từ database
*/
export function useGetPermissionDbList(enabled = true) {
return useQuery({
queryKey: PERMISSION_QUERY_KEYS.dbList(),
queryFn: () => permissionService.getPermissionDbList(),
enabled,
staleTime: 10 * 60 * 1000, // 10 minutes
});
}
/**
* Hook để seed permission từ enum vào DB
*/
export function useSeedPermissionFromEnum() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: () => permissionService.seedPermissionFromEnum(),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: PERMISSION_QUERY_KEYS.all,
});
},
});
}
/**
* Hook để xóa permission
*/
export function useDeletePermission() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: number) => permissionService.deletePermission(id),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: PERMISSION_QUERY_KEYS.all,
});
},
});
}