import { useMutation, useQuery, useQueryClient } from "@tanstack/react-query"; import { productsApi } from "@/lib/api"; import type { ProductCreate, ProductUpdate } from "@/types"; export const productKeys = { all: ["products"] as const, lists: () => [...productKeys.all, "list"] as const, details: () => [...productKeys.all, "detail"] as const, detail: (id: string) => [...productKeys.details(), id] as const, }; export function useProducts() { return useQuery({ queryKey: productKeys.lists(), queryFn: () => productsApi.list(), staleTime: 60000, }); } export function useProduct(id: string) { return useQuery({ queryKey: productKeys.detail(id), queryFn: () => productsApi.get(id), enabled: !!id, }); } export function useCreateProduct() { const qc = useQueryClient(); return useMutation({ mutationFn: (p: ProductCreate) => productsApi.create(p), onSuccess: () => qc.invalidateQueries({ queryKey: productKeys.lists() }), }); } export function useUpdateProduct() { const qc = useQueryClient(); return useMutation({ mutationFn: ({ id, patch }: { id: string; patch: ProductUpdate }) => productsApi.update(id, patch), onSuccess: (_d, v) => { qc.invalidateQueries({ queryKey: productKeys.lists() }); qc.invalidateQueries({ queryKey: productKeys.detail(v.id) }); }, }); } export function useDeleteProduct() { const qc = useQueryClient(); return useMutation({ mutationFn: (id: string) => productsApi.delete(id), onSuccess: () => qc.invalidateQueries({ queryKey: productKeys.lists() }), }); }