// src/redux/productApi.js
import { createApi, fetchBaseQuery } from "@reduxjs/toolkit/query/react";
export const productApi = createApi({
reducerPath: "productApi",
baseQuery: fetchBaseQuery({ baseUrl: "https://fakestoreapi.com" }),
tagTypes: ["Products"], // for cache invalidation
endpoints: (builder) => ({
// Get all products
getProducts: builder.query({
query: () => "/products",
providesTags: ["Products"],
}),
// Get single product by id
getProductById: builder.query({
query: (id) => `/products/${id}`,
providesTags: (result, error, id) => [{ type: "Products", id }],
}),
// Add new product
addProduct: builder.mutation({
query: (newProduct) => ({
url: "/products",
method: "POST",
body: newProduct,
}),
invalidatesTags: ["Products"],
}),
// Update product
updateProduct: builder.mutation({
query: ({ id, ...rest }) => ({
url: `/products/${id}`,
method: "PUT",
body: rest,
}),
invalidatesTags: (result, error, { id }) => [{ type: "Products", id }],
}),
// Delete product
deleteProduct: builder.mutation({
query: (id) => ({
url: `/products/${id}`,
method: "DELETE",
}),
invalidatesTags: ["Products"],
}),
}),
});
// Auto-generated hooks
export const {
useGetProductsQuery,
useGetProductByIdQuery,
useAddProductMutation,
useUpdateProductMutation,
useDeleteProductMutation,
} = productApi;