added some api

This commit is contained in:
Jelaletdin12
2025-11-13 21:56:30 +05:00
parent fdec9e4b0e
commit 21b9e88c5c
22 changed files with 2268 additions and 930 deletions

View File

@@ -1,42 +1,112 @@
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query"
import { apiClient } from "@/lib/api"
import type { Favorite } from "@/lib/types/api"
import { useQuery, useMutation, useQueryClient } from "@tanstack/react-query";
import { apiClient } from "@/lib/api";
import type { Favorite } from "@/lib/types/api";
// Response tiplerini tanımlayalım
interface FavoritesResponse {
data?: Favorite[];
[key: string]: any;
}
interface FavoriteActionResponse {
data?: string | Favorite[];
[key: string]: any;
}
// Response'u transform eden yardımcı fonksiyon
function transformFavoritesResponse(response: any): Favorite[] {
if (typeof response === "object" && response.data) {
return response.data;
}
if (typeof response === "string") {
try {
const parsed = JSON.parse(response);
return parsed.data || [];
} catch (error) {
console.error("Failed to parse favorites response:", error);
return [];
}
}
return [];
}
function transformActionResponse(response: any, defaultValue: string): string {
if (typeof response === "object" && response.data) {
return response.data;
}
if (typeof response === "string") {
try {
const parsed = JSON.parse(response);
return parsed.data || defaultValue;
} catch (error) {
if (response.includes("<!doctype html>")) {
return defaultValue;
}
console.error(`Failed to parse favorite response:`, error);
return defaultValue;
}
}
return defaultValue;
}
export function useFavorites() {
return useQuery({
queryKey: ["favorites"],
queryFn: async () => {
const response = await apiClient.get<Favorite[]>("/favorites")
return response.data
const response = await apiClient.get("/favorites");
return transformFavoritesResponse(response.data);
},
staleTime: 1000 * 60 * 5,
retry: 1,
})
});
}
export function useAddToFavorites() {
const queryClient = useQueryClient()
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (productId: number) => {
const response = await apiClient.post<Favorite[]>("/favorites", { product_id: productId })
return response.data
const formData = new URLSearchParams({
product_id: productId.toString(),
});
const response = await apiClient.post("/favorites", formData, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
});
return transformActionResponse(response.data, "Added");
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["favorites"] })
queryClient.invalidateQueries({ queryKey: ["favorites"] });
},
})
});
}
export function useRemoveFromFavorites() {
const queryClient = useQueryClient()
const queryClient = useQueryClient();
return useMutation({
mutationFn: async (productId: number) => {
await apiClient.delete(`/favorites/${productId}`)
const formData = new URLSearchParams({
product_id: productId.toString(),
});
const response = await apiClient.post("/favorites", formData, {
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
});
return transformActionResponse(response.data, "Removed");
},
onSuccess: () => {
queryClient.invalidateQueries({ queryKey: ["favorites"] })
queryClient.invalidateQueries({ queryKey: ["favorites"] });
},
})
});
}