"use server"; import { db } from "@/db/db"; import { carts } from "@/db/schema"; import { CartItem } from "@/lib/types"; import { eq } from "drizzle-orm"; import { revalidatePath } from "next/cache"; import { cookies } from "next/headers"; export async function updateCart(updateCartItem: CartItem) { const cartId = cookies().get("cartId")?.value; if (isNaN(Number(cartId))) { throw new Error("Invalid cartId"); } const dbCartItemsObj = await db .select() .from(carts) .where(eq(carts.id, Number(cartId))); const parsedCartItems = dbCartItemsObj ? (JSON.parse(dbCartItemsObj[0].items as string) as CartItem[]) : []; const cartItemsExcludingUpdateItem = parsedCartItems.filter( (item) => item.id !== updateCartItem.id ); if (updateCartItem.qty > 0) { await db .update(carts) .set({ items: cartItemsExcludingUpdateItem.length ? JSON.stringify([...cartItemsExcludingUpdateItem, updateCartItem]) : JSON.stringify([updateCartItem]), }) .where(eq(carts.id, Number(cartId))); } else { await db .update(carts) .set({ items: cartItemsExcludingUpdateItem && cartItemsExcludingUpdateItem.length ? JSON.stringify(cartItemsExcludingUpdateItem) : JSON.stringify([]), }) .where(eq(carts.id, Number(cartId))); } revalidatePath("/"); }