import { NextRequest, NextResponse } from "next/server"; import { bagistoFetch } from "@/utils/bagisto"; import { CREATE_ADD_PRODUCT_IN_CART, REMOVE_CART_ITEM, UPDATE_CART_ITEM, GET_CART_ITEM, CREATE_CART_TOKEN, CREATE_MERGE_CART, GET_CHECKOUT_ADDRESSES, GET_CHECKOUT_SHIPPING_RATES, GET_CHECKOUT_PAYMENT_METHODS, CREATE_CHECKOUT_ADDRESS, CREATE_CHECKOUT_SHIPPING_METHODS, CREATE_CHECKOUT_PAYMENT_METHODS, CREATE_CHECKOUT_ORDER, // CREATE_PRODUCT_REVIEW, CREATE_PAYMENT_INITIATE, CREATE_SAVE_CHECKOUT_CART, GET_ORDER_DETAILS, CREATE_CANCEL_ORDER, // GET_PRODUCT_BY_URL_KEY, } from "@/graphql"; const ALLOWED_OPERATIONS: Record = { createAddProductInCart: CREATE_ADD_PRODUCT_IN_CART, RemoveCartItem: REMOVE_CART_ITEM, UpdateCartItem: UPDATE_CART_ITEM, GetCartItem: GET_CART_ITEM, CreateCart: CREATE_CART_TOKEN, createMergeCart: CREATE_MERGE_CART, collectionGetCheckoutAddresses: GET_CHECKOUT_ADDRESSES, CheckoutShippingRates: GET_CHECKOUT_SHIPPING_RATES, CheckoutPaymentMethods: GET_CHECKOUT_PAYMENT_METHODS, createCheckoutAddress: CREATE_CHECKOUT_ADDRESS, CreateCheckoutShippingMethod: CREATE_CHECKOUT_SHIPPING_METHODS, CreateCheckoutPaymentMethod: CREATE_CHECKOUT_PAYMENT_METHODS, CreateCheckoutOrder: CREATE_CHECKOUT_ORDER, // CreateProductReview: CREATE_PRODUCT_REVIEW, CreatePaymentInitiate: CREATE_PAYMENT_INITIATE, // 创建订单 CreateSaveCheckoutCart: CREATE_SAVE_CHECKOUT_CART, GetOrderDetails: GET_ORDER_DETAILS, // 获取订单详情 CreateCancelOrder: CREATE_CANCEL_ORDER }; // const QUERY_OPERATIONS: Record = { // GetProductById: GET_PRODUCT_BY_URL_KEY, // } interface FetchOption { query: string; variables?: Record; cache?: RequestCache; takeAuthorization?: boolean; operationName?: string; } // 需要authorization的operation function authorizationOperations(body: Record): FetchOption { const { operationName, variables } = body; const query = ALLOWED_OPERATIONS[operationName]; const finalVariables = variables; return { query, variables: finalVariables, takeAuthorization: true, cache: "no-store", // operationName } } // 不需要authorization的operation function notAuthorizationOperations(body: Record): FetchOption { const { query, variables } = body; // const query = bodyGraphqlQuery; return { query, variables, cache: "no-store", takeAuthorization: false, // operationName } } export async function POST(req: NextRequest) { try { const body = await req.json(); const { operationName } = body; if (!operationName) { return NextResponse.json( { message: "Invalid or unauthorized operation: " + (operationName || "missing") }, { status: 400 } ); } let fetchOption: FetchOption = notAuthorizationOperations(body); if(ALLOWED_OPERATIONS[operationName]) { fetchOption = authorizationOperations(body); } const response = await bagistoFetch(fetchOption); console.log('bagistoFetch response ------ ', response); return NextResponse.json(response.body,{ status: response.status }); } catch (error) { console.log('bagistoFetch ERROR ------ ', error); return NextResponse.json( { errors:[ { message: error instanceof Error ? error.message : "Network error" } ], data:null }, { status:500 } ); } }