adriano2005 commited on
Commit
3edad8c
·
verified ·
1 Parent(s): b5d475e

Create src/hooks/useGetProducts.ts

Browse files
Files changed (1) hide show
  1. src/hooks/useGetProducts.ts +36 -0
src/hooks/useGetProducts.ts ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ // src/hooks/useGetProducts.ts
2
+ import { useQuery } from '@tanstack/react-query';
3
+ import { ProductListSchema, Product } from '@/lib/schemas'; // Importamos o nosso contrato Zod
4
+ import axios from 'axios';
5
+
6
+ // 🎯 [DECISÃO ARQUITETURAL]: O TanStack Query exige uma chave única para o cache.
7
+ // ['products'] é a nossa chave.
8
+ const PRODUCT_QUERY_KEY = ['products'];
9
+
10
+ /**
11
+ * Custom hook para buscar todos os produtos da Fake Store API.
12
+ * Gerencia o cache, loading e erros automaticamente.
13
+ */
14
+ export const useGetProducts = () => {
15
+ return useQuery({
16
+ queryKey: PRODUCT_QUERY_KEY,
17
+ queryFn: async () => {
18
+ // 1. Fetching dos dados da API externa
19
+ const response = await axios.get('https://fakestoreapi.com/products');
20
+
21
+ // 2. 🔐 [SECURITY/TYPESAFE]: Validação com Zod (Parse, Don't Validate)
22
+ // Se a resposta da API não corresponder ao nosso ProductListSchema, o Zod
23
+ // lança um erro antes que os dados cheguem na UI.
24
+ // Isso impede que a aplicação quebre em produção com dados inválidos.
25
+ const parsedData = ProductListSchema.parse(response.data);
26
+
27
+ return parsedData; // Dados validados e tipados
28
+ },
29
+ // ⚡ [PERFORMANCE]: Configurações de cache do TanStack Query
30
+ // Stale time: O dado é considerado 'fresco' por 5 minutos (300.000ms).
31
+ // Enquanto for fresco, ele não busca na API de novo ao re-renderizar o componente.
32
+ staleTime: 1000 * 60 * 5,
33
+ // Cache time: O dado fica na memória por 30 minutos.
34
+ cacheTime: 1000 * 60 * 30,
35
+ });
36
+ };