| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273 |
- "use server";
- import {cookies} from "next/headers";
- import { GUEST_CART_TOKEN } from "@/utils/constants";
- import { CREATE_ADD_PRODUCT_IN_CART } from "@/graphql";
- import { auth } from "@/utils/auth/auth-helper";
- import { serverGraphqlFetch } from "@utils/bagisto";
- import {createGuestCartToken,setGuestCookie} from "@/server-service/guestCartTokenService";
- import { AddToCartData,AddToCartVariables } from "@/types/cart/type";
- export async function addProductToCartAction(param:AddToCartVariables) {
- const authSession = await auth();
- const accessToken = authSession?.user?.accessToken;
- const cookieStore = await cookies();
- const guestCartToken = cookieStore.get(GUEST_CART_TOKEN)?.value;
- if(!accessToken && !guestCartToken) {
- const createRes = await createGuestCartToken();
- if(!createRes.success) {
- return {
- success: false,
- msg: createRes.msg,
- cartData: null
- }
- }
- }
- try{
- const response = await serverGraphqlFetch<AddToCartData,AddToCartVariables>({
- query: CREATE_ADD_PRODUCT_IN_CART,
- variables: param,
- cache: "no-store",
- });
- if(!response.error) {
- const responseData = response.data.createAddProductInCart?.addProductInCart;
- /** 兜底代码 start*/
- // 游客加购,然后清空购物车,然后刷新页面,然后再加购,然后再刷新页面,购物车会失效,所以添加兜底代码
- // 如果之前的cartToken有效,responseCartId和responseCartToken的值是一样的都是cart id; 否则两者不相等
- const responseCartId = responseData.id;
- const responseCartToken = responseData.cartToken;
- if(!accessToken && responseCartId !== responseCartToken) {
- await setGuestCookie({
- guestCartId: responseCartId,
- guestToken: responseCartToken,
- isGuest: true
- });
- }
- /** 兜底代码 end*/
- return {
- success: true,
- msg: '',
- cartData: response.data
- }
- } else {
- return {
- success: false,
- msg: response.error.message,
- cartData: null
- }
- }
- } catch(error) {
- return {
- success: false,
- msg: error instanceof Error ? error.message : 'Add product to cart failed!',
- cartData: null
- }
- }
- };
|