From e10e94bf72f9b503f2beb70c4b82ec752e74e21f Mon Sep 17 00:00:00 2001 From: shafi54 <108669266+shafi-aviz@users.noreply.github.com> Date: Mon, 9 Mar 2026 22:02:26 +0530 Subject: [PATCH 1/2] enh --- apps/admin-ui/components/OrderOptionsMenu.tsx | 35 ++++++++++++++++++ .../src/trpc/apis/admin-apis/apis/order.ts | 15 ++++++++ apps/info-site/public/logo.png | Bin 0 -> 46112 bytes 3 files changed, 50 insertions(+) create mode 100644 apps/info-site/public/logo.png diff --git a/apps/admin-ui/components/OrderOptionsMenu.tsx b/apps/admin-ui/components/OrderOptionsMenu.tsx index 424b48e..d771738 100644 --- a/apps/admin-ui/components/OrderOptionsMenu.tsx +++ b/apps/admin-ui/components/OrderOptionsMenu.tsx @@ -103,6 +103,18 @@ export function OrderOptionsMenu({ } }; + const handleOpenInMaps = () => { + if (order.latitude && order.longitude) { + const url = `https://www.google.com/maps/search/?api=1&query=${order.latitude},${order.longitude}`; + Linking.openURL(url); + } else { + Alert.alert('No location coordinates available'); + } + }; + + const hasCoordinates = order.latitude !== null && order.latitude !== undefined && + order.longitude !== null && order.longitude !== undefined; + return ( @@ -257,6 +269,29 @@ export function OrderOptionsMenu({ + {hasCoordinates && ( + { + handleOpenInMaps(); + onClose(); + }} + > + + + + + + Open in Maps + + + View delivery location on Google Maps + + + + + )} + { diff --git a/apps/backend/src/trpc/apis/admin-apis/apis/order.ts b/apps/backend/src/trpc/apis/admin-apis/apis/order.ts index 875018e..707f642 100644 --- a/apps/backend/src/trpc/apis/admin-apis/apis/order.ts +++ b/apps/backend/src/trpc/apis/admin-apis/apis/order.ts @@ -10,6 +10,8 @@ import { refunds, coupons, couponUsage, + complaints, + payments, } from "@/src/db/schema"; import { eq, and, gte, lt, desc, SQL, inArray } from "drizzle-orm"; import dayjs from "dayjs"; @@ -1001,3 +1003,16 @@ export const orderRouter = router({ // {"id": "order_Rhh00qJNdjUp8o", "notes": {"retry": "true", "customerOrderId": "14"}, "amount": 21000, "entity": "order", "status": "created", "receipt": "order_14_retry", "attempts": 0, "currency": "INR", "offer_id": null, "signature": "6df20655021f1d6841340f2a2ef2ef9378cb3d43495ab09e85f08aea1a851583", "amount_due": 21000, "created_at": 1763575791, "payment_id": "pay_Rhh15cLL28YM7j", "amount_paid": 0} type RefundStatus = "success" | "pending" | "failed" | "none" | "na"; + +export async function deleteOrderById(orderId: number): Promise { + await db.transaction(async (tx) => { + await tx.delete(orderItems).where(eq(orderItems.orderId, orderId)); + await tx.delete(orderStatus).where(eq(orderStatus.orderId, orderId)); + await tx.delete(payments).where(eq(payments.orderId, orderId)); + await tx.delete(refunds).where(eq(refunds.orderId, orderId)); + await tx.delete(couponUsage).where(eq(couponUsage.orderId, orderId)); + await tx.delete(complaints).where(eq(complaints.orderId, orderId)); + await tx.delete(orders).where(eq(orders.id, orderId)); + }); +} + diff --git a/apps/info-site/public/logo.png b/apps/info-site/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..806f53043b0c821a2f2b2409f7aec3e12e0105ee GIT binary patch literal 46112 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 Date: Mon, 9 Mar 2026 22:58:14 +0530 Subject: [PATCH 2/2] enh --- .../src/trpc/apis/user-apis/apis/product.ts | 18 +----------- .../components/PaymentAndOrderComponent.tsx | 8 ++--- apps/user-ui/components/SlotSpecificView.tsx | 16 +++++----- apps/user-ui/components/cart-page.tsx | 6 ++-- apps/user-ui/components/checkout-page.tsx | 8 ++--- apps/user-ui/hooks/cart-query-hooks.tsx | 29 ++++++++----------- packages/ui/index.ts | 6 ++-- 7 files changed, 35 insertions(+), 56 deletions(-) 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) { -- 2.45.3