Skip to content

Commit

Permalink
First attempt at new order
Browse files Browse the repository at this point in the history
  • Loading branch information
EthanAuyeung committed Apr 15, 2024
1 parent 8031967 commit cc0e16c
Show file tree
Hide file tree
Showing 10 changed files with 92 additions and 27 deletions.
6 changes: 6 additions & 0 deletions src/api/supabase/queries/cart_queries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -208,3 +208,9 @@ export async function fetchCartItemsWithQuantity(): Promise<

return fetchedProducts;
}

export async function fetchCartIdFromUser() {
const user = await fetchUser();
const cartID = user.cart_id;
return cartID;
}
43 changes: 39 additions & 4 deletions src/api/supabase/queries/order_queries.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* eslint-disable no-console */
//

import { Order, OrderProduct, Product } from '../../../schema/schema';
import { Order, OrderProduct, OrderStatus, Product } from '../../../schema/schema';
import { fetchUser } from './user_queries';
import { fetchProductByID } from './product_queries';
import supabase from '../createClient';
Expand Down Expand Up @@ -33,17 +33,19 @@ export async function createOrder() {
.insert({ user_id: user.id })
.select('*')
.single();

console.log(order);
if (error) {
throw new Error(`Error creating order: ${error.message}`);
}

console.log(order.id)
await supabase
.from('users')
.from('profiles')
.update({ cart_id: order.id })
.match({ id: user.id });
}


/**
* gets all orders by user id and sorted it by creation data
* @param Order[] - An array of Order objects.
Expand All @@ -68,7 +70,7 @@ export async function fetchOrdersByUser(): Promise<Order[]> {
.from('order')
.select('*')
.eq('user_id', userId)
.neq('status', 'In Progress');
.neq('order_status', 'In Progress');

if (error) {
throw new Error(`Error fetching orders for user: ${error.message}`);
Expand Down Expand Up @@ -228,3 +230,36 @@ export async function updateCartPickupId(pickupId: number) {
.update({ pickup_time_id: pickupId })
.eq('id', cartId);
}

/* Update the status of an order */
export async function updateOrderStatus(orderId: number, orderStatus: OrderStatus) {
await supabase
.from('order')
.update({order_status: orderStatus})
.eq('id', orderId);
}
/**
* Gets user's most recent order
* @returns Promise<Order> - The most recent Order object, or throws an error if no order is found.
*/
export async function fetchCartIdFromUserfetchMostRecentOrderByUser(): Promise<Order> {
const user = await fetchUser();
const userId = user.id;
const { data, error } = await supabase
.from('order')
.select('*')
.eq('user_id', userId)
.order('created_at', { ascending: false }) // Order by creation date in descending order
.limit(1); // Limit to only one order

if (error) {
throw new Error(`Error fetching most recent order for user: ${error.message}`);
}

if (data.length === 0) {
throw new Error('No orders found for the user.');
}

// Return the first order in the data array
return data[0];
}
15 changes: 13 additions & 2 deletions src/app/delivery/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ import {
} from '@/api/supabase/queries/user_queries';
import BackButton from '../../components/BackButton/BackButton';
import {
fetchCartIdFromUser,
fetchCartItemsWithQuantity,
totalNumberOfItemsInCart,
} from '../../api/supabase/queries/cart_queries';
import { Heading1, Normal700Text } from '../../styles/fonts';
import { ProductWithQuantity, User, Address } from '../../schema/schema';
import { ProductWithQuantity, User, Address, OrderStatus } from '../../schema/schema';
import OrderSummary from '../../components/OrderSummaryFolder/OrderSummary';
import NavBar from '../../components/NavBarFolder/NavBar';
import {
Expand All @@ -24,6 +25,7 @@ import {
BackButtonDiv,
OutterDiv,
} from './styles';
import { createOrder, fetchCurrentOrdersByUser, updateOrderStatus } from '@/api/supabase/queries/order_queries';

export default function App() {
const [numberOfItems, setNumberOfItems] = useState(0);
Expand Down Expand Up @@ -68,7 +70,16 @@ export default function App() {
<OrderContainer>
<OrderSummary cart={cart} numberOfItems={numberOfItems} />
<OrderButton
onClick={() => router.push('/orderConfirmationDelivery')}
onClick={async () => {
const firstOrder = (await fetchCartIdFromUser());
await updateOrderStatus(firstOrder, OrderStatus.Submitted);
await createOrder();
const newestOrder = (await fetchCartIdFromUser());
await updateOrderStatus(newestOrder, OrderStatus.inProgress);
console.log(newestOrder)
router.push('/orderConfirmationDelivery')
}
}
>
Place Order
</OrderButton>
Expand Down
10 changes: 7 additions & 3 deletions src/app/orderConfirmationPickUp/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { useState, useEffect } from 'react';

import { fetchUser } from '@/api/supabase/queries/user_queries';
import { fetchPickupTimesByID } from '@/api/supabase/queries/pickup_queries';
import { fetchCurrentOrdersByUser } from '@/api/supabase/queries/order_queries';
import { fetchCurrentOrdersByUser, getOrderById } from '@/api/supabase/queries/order_queries';
import { Body2Bold, Body2, Heading3Bold } from '@/styles/fonts';
import { fetchCartItemsWithQuantity } from '../../api/supabase/queries/cart_queries';

Expand All @@ -26,11 +26,15 @@ import {
} from './styles';

import { Product, User, Pickup } from '../../schema/schema';
import { useSearchParams } from 'next/navigation';

export default function OrderConfirmationPickUp() {
const [Cart, setCart] = useState<Product[]>([]);
const [user, setUser] = useState<User>();
const [pickupTime, setPickupTime] = useState<Pickup>();
const searchParams = useSearchParams();
const orderIDFromSearch = searchParams.get('orderID');
console.log(orderIDFromSearch);

useEffect(() => {
async function fetchProducts() {
Expand All @@ -41,8 +45,8 @@ export default function OrderConfirmationPickUp() {
async function setUserDetails() {
const fetchedUser = await fetchUser();
setUser(fetchedUser);
const currOrder = await fetchCurrentOrdersByUser();
const pickup = await fetchPickupTimesByID(currOrder[0].pickup_time_id);
const currOrder = await getOrderById(Number(orderIDFromSearch));
const pickup = await fetchPickupTimesByID(currOrder.pickup_time_id);
setPickupTime(pickup);
}

Expand Down
2 changes: 1 addition & 1 deletion src/app/orderPage/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ export default function OrderPage() {
<Heading>{formatDate(order?.created_at)}</Heading>
<StatusButton>
{' '}
<Body1Bold>{order?.status}</Body1Bold>{' '}
<Body1Bold>{order?.order_status}</Body1Bold>{' '}
</StatusButton>
</OutterDiv>
<OutterFavoriteDiv>
Expand Down
18 changes: 13 additions & 5 deletions src/app/pickup/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,16 @@
import { ArrowLeft } from 'react-feather';
import { fetchUser } from '@/api/supabase/queries/user_queries';
import {
fetchCartIdFromUser,
fetchCartItemsWithQuantity,
totalNumberOfItemsInCart,
} from '@/api/supabase/queries/cart_queries';
import { useState, useEffect } from 'react';
import { useRouter } from 'next/navigation';
import { useRouter, useSearchParams } from 'next/navigation';
import { Heading4Bold } from '@/styles/fonts';
import { fetchNRecentPickupTimes } from '@/api/supabase/queries/pickup_queries';
import { updateCartPickupId } from '@/api/supabase/queries/order_queries';
import { Pickup, User, ProductWithQuantity } from '@/schema/schema';
import { updateCartPickupId, updateOrderStatus, createOrder } from '@/api/supabase/queries/order_queries';
import { Pickup, User, ProductWithQuantity, OrderStatus } from '@/schema/schema';
import OrderSummary from '../../components/OrderSummaryFolder/OrderSummary';
import NavBar from '../../components/NavBarFolder/NavBar';
import {
Expand Down Expand Up @@ -152,7 +153,14 @@ export default function Pickup() {
onClick={async () => {
if (selectedPickupIndex !== 0) {
await updateCartPickupId(selectedPickupIndex); // TODO double check if this is correct
router.push('/orderConfirmationPickUp');
const firstOrder = (await fetchCartIdFromUser());
await updateOrderStatus(firstOrder, OrderStatus.Submitted);
await createOrder();
const newestOrder = (await fetchCartIdFromUser());
console.log(newestOrder);
await updateOrderStatus(newestOrder, OrderStatus.inProgress);
router.push(`/orderConfirmationPickUp?${firstOrder}`);

} else {
// TODO handle the case where they didn't select a time!
}
Expand All @@ -164,4 +172,4 @@ export default function Pickup() {
</PageDiv>
</div>
);
}
}
14 changes: 7 additions & 7 deletions src/app/profileScreen/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -171,19 +171,19 @@ function OrderHistorySection(props: { Orders: Order[] }) {

if (firstOrderProducts.length > 0) {
let backgroundColor = 'transparent';
if (Orders[0].status === 'Submitted') {
if (Orders[0].order_status === 'Submitted') {
backgroundColor = '#CEE8BE';
} else if (Orders[0].status === 'Rejected') {
} else if (Orders[0].order_status === 'Rejected') {
backgroundColor = '#FFDDDD';
} else if (Orders[0].status === 'Confirmed') {
} else if (Orders[0].order_status === 'Confirmed') {
backgroundColor = '#C7DDFF';
}
let icon;
if (Orders[0].status === 'Submitted') {
if (Orders[0].order_status === 'Submitted') {
icon = <CheckCircle />;
} else if (Orders[0].status === 'Rejected') {
} else if (Orders[0].order_status === 'Rejected') {
icon = <X />;
} else if (Orders[0].status === 'Confirmed') {
} else if (Orders[0].order_status === 'Confirmed') {
icon = <Check />;
} else {
icon = null;
Expand Down Expand Up @@ -230,7 +230,7 @@ function OrderHistorySection(props: { Orders: Order[] }) {
>
{icon}
<Body2Bold style={{ marginLeft: '13px' }}>
{Orders[0].status}
{Orders[0].order_status}
</Body2Bold>
</div>
<MostRecentOrder>
Expand Down
2 changes: 1 addition & 1 deletion src/components/OrderHistory/OrderHistoryBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export default function OrderDetailsWithProducts({
<OrderHistoryText
date={order.created_at}
orderNumber={order.id.toString()}
status={order.status}
status={order.order_status}
order={order}
/>
<ImageCarousel images={imageUrls} />
Expand Down
6 changes: 3 additions & 3 deletions src/components/OrderHistory/OrderHistoryText.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ export default function OrderDetails(props: OrderDetailsProps) {
const queryString = querystring.stringify({ orderID });
router.push(`/orderPage?${queryString}`);
};
if (order.status === OrderStatus.Rejected) {
if (order.order_status === OrderStatus.Rejected) {
return (
<div
style={{
Expand Down Expand Up @@ -81,7 +81,7 @@ export default function OrderDetails(props: OrderDetailsProps) {
</div>
);
}
if (order.status === OrderStatus.Complete) {
if (order.order_status === OrderStatus.Complete) {
return (
<div
style={{
Expand Down Expand Up @@ -122,7 +122,7 @@ export default function OrderDetails(props: OrderDetailsProps) {
</div>
);
}
if (order.status === OrderStatus.Submitted) {
if (order.order_status === OrderStatus.Submitted) {
return (
<div
style={{
Expand Down
3 changes: 2 additions & 1 deletion src/schema/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ export type User = {
};

export enum OrderStatus {
inProgress = 'In Progress',
Submitted = 'Submitted',
Complete = 'Confirmed',
Rejected = 'Rejected',
Expand All @@ -25,7 +26,7 @@ export enum OrderStatus {
export type Order = {
id: number; // bigint generated by default as identity
user_id: string; // UUID not null
status: OrderStatus; // Enum type OrderStatus
order_status: OrderStatus; // Enum type OrderStatus
pickup_time_id: number; // bigint null
created_at: string; // timestamp with time zone not null default now();
order_product_id_array: number[];
Expand Down

0 comments on commit cc0e16c

Please sign in to comment.