diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 82fa097..b34d5fe 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -1,8 +1,7 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { products } from "../../data/products"; -import discountCodes from "../../data/discountCodes.json"; import type { DiscountCode } from "../../types/discount"; export default function AdminPage() { @@ -215,12 +214,28 @@ function ProductsManager() { function DiscountManager() { const [discountList, setDiscountList] = - useState>(discountCodes); + useState>({}); const [newCode, setNewCode] = useState(""); const [newPercentage, setNewPercentage] = useState(0); const [newExpiration, setNewExpiration] = useState(""); const [newDescription, setNewDescription] = useState(""); + useEffect(() => { + const fetchDiscountCodes = async () => { + try { + const response = await fetch('/api/discount-codes'); + if (response.ok) { + const codes = await response.json(); + setDiscountList(codes); + } + } catch (error) { + console.error('Failed to fetch discount codes:', error); + } + }; + + fetchDiscountCodes(); + }, []); + const addDiscountCode = async () => { if (!newCode || newPercentage <= 0) return; diff --git a/src/app/api/discount-codes/route.ts b/src/app/api/discount-codes/route.ts new file mode 100644 index 0000000..e9b0479 --- /dev/null +++ b/src/app/api/discount-codes/route.ts @@ -0,0 +1,22 @@ +import { NextResponse } from "next/server"; + +const DATA_SERVER_URL = process.env.DATA_SERVER_URL || "http://localhost:3001"; + +export async function GET() { + try { + const response = await fetch(`${DATA_SERVER_URL}/api/discount-codes`); + + if (!response.ok) { + throw new Error("Failed to fetch discount codes"); + } + + const discountCodes = await response.json(); + return NextResponse.json(discountCodes); + } catch (error) { + console.error("Error fetching discount codes:", error); + return NextResponse.json( + { error: "Failed to fetch discount codes" }, + { status: 500 } + ); + } +} \ No newline at end of file diff --git a/src/components/CartView.tsx b/src/components/CartView.tsx index ad6d876..37291a1 100644 --- a/src/components/CartView.tsx +++ b/src/components/CartView.tsx @@ -1,14 +1,30 @@ "use client"; -import { useState } from "react"; +import { useState, useEffect } from "react"; import { useCart } from "../contexts/CartContext"; import { formatDiamonds } from "../utils/formatDiamonds"; -import discountCodes from "../data/discountCodes.json"; -import type { DiscountCode } from "../types/discount"; +import type { DiscountCode, DiscountCodes } from "../types/discount"; export default function CartView() { const { state, dispatch } = useCart(); const [discountCode, setDiscountCode] = useState(""); + const [discountCodes, setDiscountCodes] = useState({}); + + useEffect(() => { + const fetchDiscountCodes = async () => { + try { + const response = await fetch('/api/discount-codes'); + if (response.ok) { + const codes = await response.json(); + setDiscountCodes(codes); + } + } catch (error) { + console.error('Failed to fetch discount codes:', error); + } + }; + + fetchDiscountCodes(); + }, []); const calculateItemTotal = (item: (typeof state.items)[0]) => { let basePrice = item.product.pricePerStack * item.quantity; diff --git a/src/data/discountCodes.json b/src/data/discountCodes.json deleted file mode 100644 index 0967ef4..0000000 --- a/src/data/discountCodes.json +++ /dev/null @@ -1 +0,0 @@ -{}