From 63d38fb99d43e8365132acf497326ae596d0dbe1 Mon Sep 17 00:00:00 2001 From: THIS ONE IS A LITTLE BIT TRICKY KRUB Date: Thu, 3 Apr 2025 21:30:41 +0700 Subject: [PATCH] feat: refactor inventory item deletion and editing logic for improved error handling and structure --- backend/internal/api/inventory.go | 4 +- frontend/api/inventory.ts | 29 +++++++- .../inventory/delete-inventory-item.tsx | 5 +- .../inventory/edit-inventory-item.tsx | 73 +++++++------------ frontend/app/(sidebar)/inventory/page.tsx | 58 ++++++++++----- frontend/types.ts | 7 +- 6 files changed, 98 insertions(+), 78 deletions(-) diff --git a/backend/internal/api/inventory.go b/backend/internal/api/inventory.go index f1cc6fe..04ca1cf 100644 --- a/backend/internal/api/inventory.go +++ b/backend/internal/api/inventory.go @@ -160,7 +160,6 @@ type GetInventoryItemOutput struct { type DeleteInventoryItemInput struct { Header string `header:"Authorization" required:"true" example:"Bearer token"` - UserID string `header:"userId" required:"true" example:"user-uuid"` ID string `path:"id"` } @@ -347,7 +346,8 @@ func (a *api) updateInventoryItemHandler(ctx context.Context, input *UpdateInven } func (a *api) deleteInventoryItemHandler(ctx context.Context, input *DeleteInventoryItemInput) (*DeleteInventoryItemOutput, error) { - err := a.inventoryRepo.Delete(ctx, input.ID, input.UserID) + userID, err := a.getUserIDFromHeader(input.Header) + err = a.inventoryRepo.Delete(ctx, input.ID, userID) if err != nil { return nil, err } diff --git a/frontend/api/inventory.ts b/frontend/api/inventory.ts index 7c8d0f8..3847234 100644 --- a/frontend/api/inventory.ts +++ b/frontend/api/inventory.ts @@ -92,9 +92,32 @@ export async function deleteInventoryItem(id: string) { try { const response = await axiosInstance.delete("/inventory/" + id); return response.data; - } catch (error) { - console.error("Error while deleting Inventory Item! " + error); - throw new Error("Failed to deleting inventory item: " + error); + } catch (error: unknown) { + // Cast error to AxiosError to safely access response properties + if (error instanceof AxiosError && error.response) { + // Log the detailed error message + console.error("Error while deleting Inventory Item!"); + console.error("Response Status:", error.response.status); // e.g., 422 + console.error("Error Detail:", error.response.data?.detail); // Custom error message from backend + console.error("Full Error Response:", error.response.data); // Entire error object (including details) + + // Throw a new error with a more specific message + throw new Error( + `Failed to delete inventory item: ${ + error.response.data?.detail || error.message + }` + ); + } else { + // Handle other errors (e.g., network errors or unknown errors) + console.error( + "Error while deleting Inventory Item, unknown error:", + error + ); + throw new Error( + "Failed to delete inventory item: " + + (error instanceof Error ? error.message : "Unknown error") + ); + } } } export async function updateInventoryItem( diff --git a/frontend/app/(sidebar)/inventory/delete-inventory-item.tsx b/frontend/app/(sidebar)/inventory/delete-inventory-item.tsx index 677c095..79679c9 100644 --- a/frontend/app/(sidebar)/inventory/delete-inventory-item.tsx +++ b/frontend/app/(sidebar)/inventory/delete-inventory-item.tsx @@ -19,7 +19,6 @@ export function DeleteInventoryItem({ id }: { id: string }) { mutationFn: deleteInventoryItem, onSuccess: () => { queryClient.invalidateQueries({ queryKey: ["inventoryItems"] }); - setOpen(false); // Close dialog on success }, onError: (error) => { console.error("Failed to delete item:", error); @@ -32,7 +31,7 @@ export function DeleteInventoryItem({ id }: { id: string }) { return (
- {/* trigger button for the confirmation dialog */} + {/* delete confirmation dialog */}