diff --git a/apps/backend/src/trpc/apis/user-apis/apis/product.ts b/apps/backend/src/trpc/apis/user-apis/apis/product.ts index 51ec140..5abbfb3 100644 --- a/apps/backend/src/trpc/apis/user-apis/apis/product.ts +++ b/apps/backend/src/trpc/apis/user-apis/apis/product.ts @@ -5,7 +5,7 @@ import { productInfo, units, productSlots, deliverySlotInfo, specialDeals, store import { claimUploadUrl, extractKeyFromPresignedUrl, scaffoldAssetUrl } from '@/src/lib/s3-client'; import { ApiError } from '@/src/lib/api-error'; import { eq, and, gt, sql, inArray, desc } from 'drizzle-orm'; -import { getProductById as getProductByIdFromCache, getAllProducts as getAllProductsFromCache } from '@/src/stores/product-store'; +import { getProductById as getProductByIdFromCache } from '@/src/stores/product-store'; import dayjs from 'dayjs'; // Uniform Product Type @@ -246,20 +246,4 @@ export const productRouter = router({ return { success: true, review: newReview }; }), - getAllProductsSummary: publicProcedure - .query(async (): Promise => { - // Get all products from cache - const allCachedProducts = await getAllProductsFromCache(); - - // Transform the cached products to match the expected summary format - // (with empty deliverySlots and specialDeals arrays for summary view) - const transformedProducts = allCachedProducts.map(product => ({ - ...product, - deliverySlots: [], // Empty for summary view - specialDeals: [], // Empty for summary view - })); - - return transformedProducts; - }), - }); diff --git a/apps/user-ui/components/PaymentAndOrderComponent.tsx b/apps/user-ui/components/PaymentAndOrderComponent.tsx index 7059a1f..713aefe 100644 --- a/apps/user-ui/components/PaymentAndOrderComponent.tsx +++ b/apps/user-ui/components/PaymentAndOrderComponent.tsx @@ -54,13 +54,13 @@ const PaymentAndOrderComponent: React.FC = ({ queryClient.invalidateQueries({ queryKey: [`local-cart-${cartType}`] }); }; - const { data: productsData } = trpc.user.product.getAllProductsSummary.useQuery(); + const { data: productsData } = trpc.common.product.getAllProductsSummary.useQuery({}); // Memoized flash-eligible product IDs const flashEligibleProductIds = useMemo(() => { - if (!productsData) return new Set(); + if (!productsData?.products) return new Set(); return new Set( - productsData + productsData.products .filter((product: any) => product.isFlashAvailable) .map((product: any) => product.id) ); @@ -397,4 +397,4 @@ const PaymentAndOrderComponent: React.FC = ({ ); }; -export default PaymentAndOrderComponent; \ No newline at end of file +export default PaymentAndOrderComponent; diff --git a/apps/user-ui/components/SlotSpecificView.tsx b/apps/user-ui/components/SlotSpecificView.tsx index a363983..8a9c5ec 100644 --- a/apps/user-ui/components/SlotSpecificView.tsx +++ b/apps/user-ui/components/SlotSpecificView.tsx @@ -348,7 +348,7 @@ export function SlotProducts({ slotId:slotIdParent, storeId:storeIdParent, baseU const slotQuery = trpc.user.slots.getSlotById.useQuery({ slotId: slotId! }, { enabled: !!slotId }); - const productsQuery = trpc.user.product.getAllProductsSummary.useQuery(); + const productsQuery = trpc.common.product.getAllProductsSummary.useQuery({}); const { addToCart = () => { } } = useAddToCart({ showSuccessAlert: false, showErrorAlert: false, refetchCart: true }, "regular") || {}; @@ -401,8 +401,8 @@ export function SlotProducts({ slotId:slotIdParent, storeId:storeIdParent, baseU const slotProductIds = new Set(slotQuery.data.products?.map((p: any) => p.id) || []); const filteredProducts: any[] = storeIdNum - ? productsQuery?.data?.filter(p => - p.store?.id === storeIdNum && slotProductIds.has(p.id) + ? productsQuery?.data?.products?.filter(p => + p.storeId === storeIdNum && slotProductIds.has(p.id) ) || [] : slotQuery.data.products; @@ -448,7 +448,7 @@ export function FlashDeliveryProducts({ storeId:storeIdParent, baseUrl, onProduc const storeId = storeIdParent; const storeIdNum = storeId; - const productsQuery = trpc.user.product.getAllProductsSummary.useQuery(); + const productsQuery = trpc.common.product.getAllProductsSummary.useQuery({}); const { addToCart = () => { } } = useAddToCart({ showSuccessAlert: false, showErrorAlert: false, refetchCart: true }, "flash") || {}; @@ -489,14 +489,14 @@ export function FlashDeliveryProducts({ storeId:storeIdParent, baseUrl, onProduc let flashProducts: any[] = []; if (storeIdNum) { // Filter by store, flash availability, and stock status - flashProducts = productsQuery?.data?.filter(p => - p.store?.id === storeIdNum && + flashProducts = productsQuery?.data?.products?.filter(p => + p.storeId === storeIdNum && p.isFlashAvailable && !p.isOutOfStock ) || []; } else { // Show all flash-available products that are in stock - flashProducts = productsQuery?.data?.filter(p => + flashProducts = productsQuery?.data?.products?.filter(p => p.isFlashAvailable && !p.isOutOfStock ) || []; @@ -533,4 +533,4 @@ export function FlashDeliveryProducts({ storeId:storeIdParent, baseUrl, onProduc /> ); -} \ No newline at end of file +} diff --git a/apps/user-ui/components/cart-page.tsx b/apps/user-ui/components/cart-page.tsx index a7ec6f5..cae6dc7 100644 --- a/apps/user-ui/components/cart-page.tsx +++ b/apps/user-ui/components/cart-page.tsx @@ -80,16 +80,16 @@ export default function CartPage({ isFlashDelivery = false }: CartPageProps) { const { data: couponsRaw, error: couponsError } = trpc.user.coupon.getEligible.useQuery(); const { data: constsData } = useGetEssentialConsts(); - const { data: productsData } = trpc.user.product.getAllProductsSummary.useQuery(); + const { data: productsData } = trpc.common.product.getAllProductsSummary.useQuery({}); const cartItems = cartData?.items || []; // Memoized flash-eligible product IDs const flashEligibleProductIds = useMemo(() => { - if (!productsData) return new Set(); + if (!productsData?.products) return new Set(); return new Set( - productsData + productsData.products .filter((product: any) => product.isFlashAvailable) .map((product: any) => product.id) ); diff --git a/apps/user-ui/components/checkout-page.tsx b/apps/user-ui/components/checkout-page.tsx index 8a0b392..1f25ec5 100644 --- a/apps/user-ui/components/checkout-page.tsx +++ b/apps/user-ui/components/checkout-page.tsx @@ -35,7 +35,7 @@ const CheckoutPage: React.FC = ({ isFlashDelivery = false }) const { data: addresses, refetch: refetchAddresses } = trpc.user.address.getUserAddresses.useQuery(); const { data: slotsData, refetch: refetchSlots } = trpc.user.slots.getSlots.useQuery(); const { data: constsData } = useGetEssentialConsts(); - const { data: productsData } = trpc.user.product.getAllProductsSummary.useQuery(); + const { data: productsData } = trpc.common.product.getAllProductsSummary.useQuery({}); useMarkDataFetchers(() => { refetchCart(); @@ -53,9 +53,9 @@ const CheckoutPage: React.FC = ({ isFlashDelivery = false }) // Memoized flash-eligible product IDs const flashEligibleProductIds = useMemo(() => { - if (!productsData) return new Set(); + if (!productsData?.products) return new Set(); return new Set( - productsData + productsData.products .filter((product: any) => product.isFlashAvailable) .map((product: any) => product.id) ); @@ -273,4 +273,4 @@ const CheckoutPage: React.FC = ({ isFlashDelivery = false }) ); }; -export default CheckoutPage; \ No newline at end of file +export default CheckoutPage; diff --git a/apps/user-ui/hooks/cart-query-hooks.tsx b/apps/user-ui/hooks/cart-query-hooks.tsx index 5058511..49d7d7e 100644 --- a/apps/user-ui/hooks/cart-query-hooks.tsx +++ b/apps/user-ui/hooks/cart-query-hooks.tsx @@ -24,21 +24,8 @@ interface LocalCartItem { interface ProductSummary { id: number; - name: string; - shortDescription?: string | null; - longDescription?: string | null; price: string; - marketPrice?: string | null; - unitNotation: string; - images: string[]; - isOutOfStock: boolean; - store?: { id: number; name: string; description?: string | null } | null; incrementStep: number; - productQuantity: number; - isFlashAvailable: boolean; - flashPrice?: string | null; - deliverySlots: Array<{ id: number; deliveryTime: Date; freezeTime: Date }>; - specialDeals: Array<{ quantity: string; price: string; validTill: Date }>; } interface CartItem { @@ -146,15 +133,23 @@ export function useGetCart(options?: { }; } else { - const { data: products } = trpc.user.product.getAllProductsSummary.useQuery(); + const { data: products } = trpc.common.product.getAllProductsSummary.useQuery({}); const query = useQuery({ queryKey: [`local-cart-${cartType}`], queryFn: async () => { const cartItems = await getLocalCart(cartType); - // const productMap = Object.fromEntries(products?.map((p: ProductSummary) => [p.id, p]) || []); - const productMap = Object.fromEntries(products?.map((p) => [p.id, p]) || []); + const productMap = Object.fromEntries( + products?.products?.map((p) => [ + p.id, + { + ...p, + price: String(p.price), + marketPrice: p.marketPrice === null || p.marketPrice === undefined ? null : String(p.marketPrice), + } as ProductSummary, + ]) || [] + ); const items: CartItem[] = cartItems.map(cartItem => { const product = productMap[cartItem.productId]; @@ -507,4 +502,4 @@ export function useRemoveFromCart(options?: { } // Export clear cart function for direct use -export { clearLocalCart }; \ No newline at end of file +export { clearLocalCart }; diff --git a/packages/ui/index.ts b/packages/ui/index.ts index 97adb39..30549a9 100755 --- a/packages/ui/index.ts +++ b/packages/ui/index.ts @@ -64,9 +64,9 @@ const isDevMode = Constants.executionEnvironment !== "standalone"; // const BASE_API_URL = 'http://10.0.2.2:4000'; // const BASE_API_URL = 'http://192.168.100.101:4000'; // const BASE_API_URL = 'http://192.168.1.5:4000'; -// let BASE_API_URL = "https://mf.freshyo.in"; -let BASE_API_URL = "https://freshyo.technocracy.ovh"; -// let BASE_API_URL = 'http://192.168.100.104:4000'; +let BASE_API_URL = "https://mf.freshyo.in"; +// let BASE_API_URL = "https://freshyo.technocracy.ovh"; +// let BASE_API_URL = 'http://192.168.100.107:4000'; // let BASE_API_URL = 'http://192.168.29.176:4000'; // if(isDevMode) {