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, }); }, }); }