guestCartTokenService.ts 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import {cookies} from "next/headers";
  2. import { serverGraphqlFetch } from "@utils/bagisto";
  3. import { CREATE_CART_TOKEN } from "@/graphql";
  4. import { GUEST_CART_ID, GUEST_CART_TOKEN, IS_GUEST, GUEST_COOKIE_OPTION } from "@/utils/constants";
  5. import { CreateCartTokenData } from "@/types/cart/type";
  6. export async function deleteGuestCookie(isGuest: boolean = true) {
  7. const cookieStore = await cookies();
  8. cookieStore.delete(GUEST_CART_TOKEN);
  9. cookieStore.delete(GUEST_CART_ID);
  10. cookieStore.set(IS_GUEST, isGuest ? "true" : "false");
  11. }
  12. export async function setGuestCookie({
  13. guestToken,
  14. guestCartId,
  15. isGuest
  16. }: {
  17. guestToken: string;
  18. guestCartId: string;
  19. isGuest: boolean;
  20. }) {
  21. const cookieOptions = {
  22. httpOnly: GUEST_COOKIE_OPTION.httpOnly,
  23. maxAge: GUEST_COOKIE_OPTION.maxAge,
  24. path: GUEST_COOKIE_OPTION.path,
  25. secure: GUEST_COOKIE_OPTION.secure,
  26. sameSite: GUEST_COOKIE_OPTION.sameSite,
  27. };
  28. const cookieStore = await cookies();
  29. cookieStore.set(GUEST_CART_TOKEN,guestToken,cookieOptions);
  30. cookieStore.set(GUEST_CART_ID,guestCartId,cookieOptions);
  31. cookieStore.set(IS_GUEST,isGuest ? "true" : "false");
  32. }
  33. export async function createGuestCartToken() {
  34. const cookieStore = await cookies();
  35. const existingToken = cookieStore.get(GUEST_CART_TOKEN)?.value;
  36. const existingCartId = cookieStore.get(GUEST_CART_ID)?.value;
  37. if (existingToken && existingCartId) {
  38. return {
  39. success: true,
  40. cartToken: existingToken,
  41. cartId: existingCartId,
  42. msg: ''
  43. };
  44. }
  45. try{
  46. const response = await serverGraphqlFetch<CreateCartTokenData>({
  47. query: CREATE_CART_TOKEN,
  48. cache: "no-store",
  49. takeAuthorization: false
  50. });
  51. const success = response.error ? false : true;
  52. let guestToken = null;
  53. let guestCartId = null;
  54. const msg = response.error ? response.error.message : '';
  55. if(success && response.data?.createCartToken) {
  56. guestToken = response.data.createCartToken.cartToken.sessionToken;
  57. guestCartId = response.data.createCartToken.cartToken.id;
  58. await setGuestCookie({
  59. guestToken,
  60. guestCartId,
  61. isGuest: true
  62. });
  63. }
  64. return {
  65. success: success,
  66. cartToken: guestToken,
  67. cartId: guestCartId,
  68. msg: msg
  69. };
  70. } catch(e: any) {
  71. return {
  72. success:false,
  73. cartToken: null,
  74. cartId: null,
  75. msg: e.message || 'Create guest cart token failed!'
  76. };
  77. }
  78. }