diff --git a/frontend/src/apis/orderApi.ts b/frontend/src/apis/orderApi.ts index be372538..83ffd5ca 100644 --- a/frontend/src/apis/orderApi.ts +++ b/frontend/src/apis/orderApi.ts @@ -1,49 +1,60 @@ -import { SelectedItem } from "./../reducers/cartReducer"; +import { OrderSummary, SelectedItem } from "./../reducers/cartReducer"; import { useShoppingCart } from "../hooks/UseShoppingCart"; - -export const createOrder = async (order: any) => {}; +import useAxiosPrivate from "../hooks/useAxiosPrivate"; +import { IcartItems } from "../models/order.model"; const getOrderSummary = () => { const { GetOrderSummary } = useShoppingCart(); return GetOrderSummary(); }; -const reduceSelectedItems = () => { +export const createOrder = async () => { + return useAxiosPrivate(); +}; + +const mapOrderSummaryToOrderRequest = () => { const orderSummary = getOrderSummary(); - let selectedItems: SelectedItem[] = []; if (orderSummary?.length) { - selectedItems = orderSummary.reduce((result: SelectedItem[], item) => { - if (item.menus?.length) { - item.menus.forEach((menu) => { - if (menu.selectedItems) { - menu.selectedItems.forEach((selectedItem) => { - const itemId = selectedItem.id; - const existingItem = result.find( - (item: any) => item.id === itemId - ); - if (existingItem) { - existingItem.price += selectedItem.price; - existingItem.quantity! += selectedItem.quantity!; - } else { - result.push({ ...selectedItem }); - } - }); - } - }); - } - return result; - }, []); + return { + state: "CREATED", + type: "DINE_IN", + singleclientId: "63d792433b857e1697fe7017", + total: calculateOrderTotalPrice(orderSummary) ?? 0, + cartItems: cartItemsMapper(orderSummary), + }; } - return selectedItems; }; -// const getCartItems = () => { -// const orderSummary = getOrderSummary(); -// if (orderSummary?.length) { -// const selectedItemsMap = new Map(); -// reduceSelectedItems.forEach((item) => {}); -// orderSummary.map((summary) => { -// const cartItem = summary.menus; -// }); -// } -// }; +const calculateOrderTotalPrice = (orderSummary: OrderSummary[]) => { + return orderSummary.reduce((acc, item) => { + return acc + (item.menus[0]?.menuTotalPrice ?? 0); + }, 0); +}; + +const calculateCartItemsTotalPrice = (selectedItems: SelectedItem[]) => { + let totalSelectedItemsPrice = 0; + if (selectedItems?.length) { + totalSelectedItemsPrice = selectedItems.reduce((acc, item) => { + return acc + Number(item?.price ?? 0); + }, 0); + } + return totalSelectedItemsPrice; +}; + +const cartItemsMapper = (orderSummary: OrderSummary[]): IcartItems[] => { + const menus = orderSummary.flatMap((summary) => summary.menus); + const cartItems = menus.map((menu) => { + return { + menuId: menu.id, + total: + menu.menuTotalPrice ?? + 0 - calculateCartItemsTotalPrice(menu.selectedItems ?? []), + note: menu.note, + selectedItems: menu.selectedItems?.map((item) => { + return { ...item, itemId: item.id }; + }), + quantity: menu.quantity, + }; + }); + return cartItems; +}; diff --git a/frontend/src/models/order.model.ts b/frontend/src/models/order.model.ts index ae40de81..24940be7 100644 --- a/frontend/src/models/order.model.ts +++ b/frontend/src/models/order.model.ts @@ -7,15 +7,18 @@ export interface IOrder { } export interface IcartItems { - menuId: string; + menuId?: string; total: number; - quantity: number; - selectedItems: IselectedItems[]; + quantity?: number; + selectedItems?: IselectedItems[]; + note?: string; } export interface IselectedItems { + id: string; itemId: string; menuId: string; price: number; - quantity: number; + quantity?: number; + menuPrice: number; }