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

150 lines
3.6 KiB
TypeScript
Raw Normal View History

2026-03-04 14:41:34 +07:00
import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query";
import * as roleService from "@/services/role.service";
import type { TCreateRoleRequestBody } from "@/types/role";
export const ROLE_QUERY_KEYS = {
all: ["roles"] as const,
list: () => [...ROLE_QUERY_KEYS.all, "list"] as const,
detail: (id: number) => [...ROLE_QUERY_KEYS.all, "detail", id] as const,
permissions: (id: number) => [...ROLE_QUERY_KEYS.all, "permissions", id] as const,
};
/**
* Hook đ lấy danh sách roles
*/
export function useGetRoleList(enabled = true) {
return useQuery({
queryKey: ROLE_QUERY_KEYS.list(),
queryFn: () => roleService.getRoleList(),
enabled,
staleTime: 5 * 60 * 1000, // 5 minutes
});
}
/**
* Hook đ lấy chi tiết role theo ID
*/
export function useGetRoleById(id: number, enabled = true) {
return useQuery({
queryKey: ROLE_QUERY_KEYS.detail(id),
queryFn: () => roleService.getRoleById(id),
enabled: enabled && id > 0,
staleTime: 5 * 60 * 1000, // 5 minutes
});
}
/**
* Hook đ lấy danh sách permissions của role
*/
export function useGetRolePermissions(id: number, enabled = true) {
return useQuery({
queryKey: ROLE_QUERY_KEYS.permissions(id),
queryFn: () => roleService.getRolePermissions(id),
enabled: enabled && id > 0,
staleTime: 5 * 60 * 1000, // 5 minutes
});
}
/**
* Hook đ tạo role mới
*/
export function useCreateRole() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data: TCreateRoleRequestBody) => roleService.createRole(data),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.list(),
});
},
});
}
/**
* Hook đ cập nhật role
*/
export function useUpdateRole() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
id,
data,
}: {
id: number;
data: Partial<TCreateRoleRequestBody>;
}) => roleService.updateRole(id, data),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.list(),
});
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.detail(variables.id),
});
},
});
}
/**
* Hook đ xóa role
*/
export function useDeleteRole() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id: number) => roleService.deleteRole(id),
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.list(),
});
},
});
}
/**
* Hook đ gán permissions cho role
*/
export function useAssignRolePermissions() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
roleId,
permissionIds,
}: {
roleId: number;
permissionIds: number[];
}) => roleService.assignRolePermissions(roleId, permissionIds),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.permissions(variables.roleId),
});
},
});
}
/**
* Hook đ bật/tắt một permission của role
*/
export function useToggleRolePermission() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: ({
roleId,
permissionId,
isChecked,
}: {
roleId: number;
permissionId: number;
isChecked: boolean;
}) => roleService.toggleRolePermission(roleId, permissionId, isChecked),
onSuccess: (_, variables) => {
queryClient.invalidateQueries({
queryKey: ROLE_QUERY_KEYS.permissions(variables.roleId),
});
},
});
}