From ec866c7f2994011836227494c9a2868fc2e43edd Mon Sep 17 00:00:00 2001 From: Karli Date: Mon, 18 Aug 2025 13:27:13 +0300 Subject: [PATCH] feat(MED-101): add audit log to cart item delete --- .../_components/cart/cart-item-delete.tsx | 4 +-- lib/services/medusaCart.service.ts | 31 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) diff --git a/app/home/(user)/_components/cart/cart-item-delete.tsx b/app/home/(user)/_components/cart/cart-item-delete.tsx index 4c359cf..be67593 100644 --- a/app/home/(user)/_components/cart/cart-item-delete.tsx +++ b/app/home/(user)/_components/cart/cart-item-delete.tsx @@ -5,8 +5,8 @@ import { useState } from "react"; import { useTranslation } from "react-i18next"; import { toast } from 'sonner'; -import { deleteLineItem } from "@lib/data/cart"; import { Spinner } from "@medusajs/icons"; +import { handleDeleteCartItem } from "~/lib/services/medusaCart.service"; const CartItemDelete = ({ id, @@ -22,7 +22,7 @@ const CartItemDelete = ({ setIsDeleting(true); const promise = async () => { - await deleteLineItem(id); + await handleDeleteCartItem({ lineId: id }); }; toast.promise(promise, { diff --git a/lib/services/medusaCart.service.ts b/lib/services/medusaCart.service.ts index 48446e3..a84c596 100644 --- a/lib/services/medusaCart.service.ts +++ b/lib/services/medusaCart.service.ts @@ -4,6 +4,7 @@ import { z } from 'zod'; import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account'; import { getSupabaseServerClient } from '@kit/supabase/server-client'; import { addToCart, deleteLineItem, retrieveCart } from '@lib/data/cart'; +import { getCartId } from '@lib/data/cookies'; import { StoreCartLineItem, StoreProductVariant } from '@medusajs/types'; import { MontonioOrderHandlerService } from '@/packages/billing/montonio/src'; import { requireUserInServerComponent } from '../server/require-user-in-server-component'; @@ -64,6 +65,36 @@ export async function handleAddToCart({ return cart; } +export async function handleDeleteCartItem({ + lineId, +}: { + lineId: string; +}) { + await deleteLineItem(lineId); + + const supabase = getSupabaseServerClient(); + const cartId = await getCartId(); + const user = await requireUserInServerComponent(); + const account = await loadCurrentUserAccount() + if (!account) { + throw new Error('Account not found'); + } + + const { error } = await supabase + .schema('audit') + .from('cart_entries') + .insert({ + variant_id: lineId, + operation: 'REMOVE_FROM_CART', + account_id: account.id, + cart_id: cartId!, + changed_by: user.id, + }); + if (error) { + throw new Error('Error logging cart entry: ' + error.message); + } +} + export async function handleNavigateToPayment({ language, paymentSessionId }: { language: string, paymentSessionId: string }) { const supabase = getSupabaseServerClient(); const user = await requireUserInServerComponent();