From 0f1df659198ac07cf4ea0085a27e462fd805cdb5 Mon Sep 17 00:00:00 2001 From: merto Date: Thu, 14 Sep 2023 14:43:30 +0300 Subject: [PATCH] - orders page template --- actions/order.ts | 5 ++- app/api/user/orders/route.ts | 22 ++++++++++++ app/orders/page.tsx | 34 +++++++++++++++++++ components/Cards/OrderCard/index.tsx | 23 +++++++++++++ components/Header/index.tsx | 2 +- components/Header/user-actions/index.tsx | 8 ++--- .../form-section/items/index.tsx | 12 +++++-- .../orders-page/orders-section/index.tsx | 24 +++++++++++++ .../orders-page/title-section/index.tsx | 17 ++++++++++ .../product-page/item-section/index.tsx | 32 +++++++++-------- libs/endpoints.ts | 5 +++ .../migrations/20230914090140_/migration.sql | 8 +++++ .../migrations/20230914091101_/migration.sql | 2 ++ .../migrations/20230914091541_/migration.sql | 9 +++++ prisma/schema.prisma | 1 + services/dateTimeFormatter.ts | 13 +++++++ types/Order.ts | 10 ++++++ types/User.ts | 1 + 18 files changed, 205 insertions(+), 23 deletions(-) create mode 100644 app/api/user/orders/route.ts create mode 100644 app/orders/page.tsx create mode 100644 components/Cards/OrderCard/index.tsx create mode 100644 containers/orders-page/orders-section/index.tsx create mode 100644 containers/orders-page/title-section/index.tsx create mode 100644 prisma/migrations/20230914090140_/migration.sql create mode 100644 prisma/migrations/20230914091101_/migration.sql create mode 100644 prisma/migrations/20230914091541_/migration.sql create mode 100644 services/dateTimeFormatter.ts create mode 100644 types/Order.ts diff --git a/actions/order.ts b/actions/order.ts index b8a8c2c..dc9b636 100644 --- a/actions/order.ts +++ b/actions/order.ts @@ -12,21 +12,24 @@ export const orderHandler = async (user: TUser) => { }, }); if (targetUser) { + const res = await prisma.order.create({ data: { products: user.basket, userId: targetUser.id, price: targetUser.totalPrice, + date: new Date() }, }); if (res.id) { + let test = user.basket.length = 0 const updatedUser = await prisma.user.update({ where: { email: user.email, }, data: { totalPrice: 0, - basket: [], + basket: [] }, }); return updatedUser; diff --git a/app/api/user/orders/route.ts b/app/api/user/orders/route.ts new file mode 100644 index 0000000..d0709c2 --- /dev/null +++ b/app/api/user/orders/route.ts @@ -0,0 +1,22 @@ +import { prisma } from "@/db/client"; +import { NextResponse } from "next/server"; +import type { NextRequest } from "next/server"; + +export const dynamic = "force-dynamic"; + +export async function POST(request: NextRequest) { + const { userId } = await request.json(); + try { + const res = await prisma.order.findMany({ + where: { + userId: userId, + }, + }); + + return NextResponse.json({ data: res }); + } catch (err) { + console.log(err); + } finally { + await prisma.$disconnect(); + } +} diff --git a/app/orders/page.tsx b/app/orders/page.tsx new file mode 100644 index 0000000..c0be65b --- /dev/null +++ b/app/orders/page.tsx @@ -0,0 +1,34 @@ +import OrdersOrdersSection from "@/containers/orders-page/orders-section"; +import OrdersTitleSection from "@/containers/orders-page/title-section"; +import React, { FC } from "react"; +import createClient from "@/db/client"; +import axios from "axios"; +import { redirect } from "next/navigation"; +import { getOrders } from "@/libs/endpoints"; + +interface OrdersPageProps {} + +const getUserOrders = async (id: string) => { + const { data } = await axios.post(getOrders, {}); + return data; +}; +const OrdersPage: FC = async ({}) => { + const supabase = createClient(); + + const { + data: { user }, + } = await supabase.auth.getUser(); + if (!user) { + redirect("/"); + } + const { data } = await getUserOrders(user.email ?? user.user_metadata.email); + + return ( +
+ + +
+ ); +}; + +export default OrdersPage; diff --git a/components/Cards/OrderCard/index.tsx b/components/Cards/OrderCard/index.tsx new file mode 100644 index 0000000..0af0678 --- /dev/null +++ b/components/Cards/OrderCard/index.tsx @@ -0,0 +1,23 @@ +import { TOrder } from '@/types/Order'; +import React, { FC } from 'react' + +interface OrderCardProps { + order:TOrder +} + +const OrderCard: FC = ({ order }) => { + return ( +
+
+

{order.date.toString( + + )}

+
+
+ +
+
+ ) +} + +export default OrderCard; \ No newline at end of file diff --git a/components/Header/index.tsx b/components/Header/index.tsx index 38052e1..96c3eec 100644 --- a/components/Header/index.tsx +++ b/components/Header/index.tsx @@ -44,7 +44,7 @@ const Header: FC = async ({ user }) => { ))} - {targetUser && } +
diff --git a/components/Header/user-actions/index.tsx b/components/Header/user-actions/index.tsx index 2340dcf..d908bd5 100644 --- a/components/Header/user-actions/index.tsx +++ b/components/Header/user-actions/index.tsx @@ -3,18 +3,16 @@ import PrimaryButton from "@/components/Buttons/PrimaryButton"; import { Basket } from "@/components/Icons/Basket"; import { Profile } from "@/components/Icons/Profile"; import { handleSignOut } from "@/db/auth"; -import { postBasket } from "@/libs/endpoints"; import { useUserStore } from "@/store/useUserStore"; import { TUser } from "@/types/User"; import { createClientComponentClient } from "@supabase/auth-helpers-nextjs"; -import axios from "axios"; import Link from "next/link"; import { useRouter } from "next/navigation"; import React, { FC, useEffect, useState } from "react"; import { toast } from "react-toastify"; interface HeaderUserActionsProps { - targetUser: TUser; + targetUser?: TUser; } const HeaderUserActions: FC = ({ targetUser }) => { @@ -32,7 +30,7 @@ const HeaderUserActions: FC = ({ targetUser }) => { }; const getUser = async () => { - if (!user) { + if (!user&&targetUser) { handleUser(targetUser); } }; @@ -54,7 +52,7 @@ const HeaderUserActions: FC = ({ targetUser }) => { }, []); return (