-
Admin Dashboard
-
Welcome, {email}!
-
- {/* Create Giveaway Form */}
-
-
🎁 Create Giveaway
-
- setGiveaway({ ...giveaway, title: e.target.value })}
- className="w-full p-3 border border-pink-200 rounded-lg bg-white text-gray-700 focus:outline-none focus:ring-2 focus:ring-pink-400"
- />
-
-
-
- {/* Update User Coins Form */}
-
+
+
+
Admin Dashboard
+
Welcome, {email}!
- {/*
*/}
+ {/* Create Giveaway Form */}
+
+
🎁 Create Giveaway
+
+ setGiveaway({ ...giveaway, title: e.target.value })}
+ className="w-full p-3 border border-pink-200 rounded-lg bg-white text-gray-700 focus:outline-none focus:ring-2 focus:ring-pink-400"
+ />
+
+
+
+ {/* Update User Coins Form */}
+
+
+ {/* Toggle Giveaway Management */}
+
+
🎮 Giveaway Management
+
+ {showGiveawayManagement && }
- );
+
+ );
}
\ No newline at end of file
diff --git a/src/app/admin/GiveawayManagementCardServer.tsx b/src/app/admin/GiveawayManagementCardServer.tsx
new file mode 100644
index 0000000..2d1a9fa
--- /dev/null
+++ b/src/app/admin/GiveawayManagementCardServer.tsx
@@ -0,0 +1,13 @@
+"use server";
+
+import {db} from "@/lib/db";
+
+export async function giveawaysFind() {
+ try {
+ const giveaways = await db.giveaway.findMany();
+ return giveaways;
+ } catch (error) {
+ console.error("Error fetching giveaways:", error);
+ throw new Error("Failed to fetch giveaways");
+ }
+}
\ No newline at end of file
diff --git a/src/app/admin/GiveawayManagementCards.tsx b/src/app/admin/GiveawayManagementCards.tsx
index e69de29..7084232 100644
--- a/src/app/admin/GiveawayManagementCards.tsx
+++ b/src/app/admin/GiveawayManagementCards.tsx
@@ -0,0 +1,109 @@
+"use client";
+
+import React, { useEffect, useState } from "react";
+import { giveawaysFind } from "./GiveawayManagementCardServer";
+
+interface Giveaway {
+ id: string;
+ title: string;
+ description: string;
+ prize: string;
+ value: number;
+ endsAt: string | null;
+ active: boolean;
+}
+
+const GiveawayManagementCards: React.FC = () => {
+ const [activeGiveaways, setActiveGiveaways] = useState
([]);
+ const [finishedGiveaways, setFinishedGiveaways] = useState([]);
+
+ const fetchGiveaways = async () => {
+ try {
+ const giveawayList = await giveawaysFind();
+ const active = giveawayList
+ .filter((giveaway) => giveaway.endsAt && new Date(giveaway.endsAt) > new Date())
+ .map((giveaway) => ({
+ ...giveaway,
+ endsAt: giveaway.endsAt ? giveaway.endsAt.toISOString() : null,
+ }));
+ const finished = giveawayList
+ .filter((giveaway) => !giveaway.endsAt || new Date(giveaway.endsAt) <= new Date())
+ .map((giveaway) => ({
+ ...giveaway,
+ endsAt: giveaway.endsAt ? giveaway.endsAt.toISOString() : null,
+ }));
+
+ setActiveGiveaways(active);
+ setFinishedGiveaways(finished);
+ } catch (error) {
+ console.error("Error fetching giveaways:", error);
+ }
+ };
+
+ const handleSelectWinner = async (giveawayId: string) => {
+ alert(`Selecting winner for giveaway ID: ${giveawayId}`);
+ };
+
+ useEffect(() => {
+ fetchGiveaways();
+ }, []);
+
+ return (
+
+
+ {/* Finished Giveaways Section */}
+
+
🏁 Finished Giveaways
+
+ {finishedGiveaways.map((giveaway) => (
+
+
+
{giveaway.title}
+
{giveaway.description}
+
Prize: {giveaway.prize}
+
Value: {giveaway.value} coins
+
+ Ended At: {giveaway.endsAt ? new Date(giveaway.endsAt).toLocaleString() : "N/A"}
+
+
+
+
+ ))}
+
+
+
+ {/* Active Giveaways Section */}
+
+
🎉 Active Giveaways
+
+ {activeGiveaways.map((giveaway) => (
+
+
{giveaway.title}
+
{giveaway.description}
+
Prize: {giveaway.prize}
+
Value: {giveaway.value} coins
+
+ Ends At: {giveaway.endsAt ? new Date(giveaway.endsAt).toLocaleString() : "N/A"}
+
+
+ ))}
+
+
+
+
+ );
+};
+
+export default GiveawayManagementCards;
\ No newline at end of file
diff --git a/src/app/giveaways/page.tsx b/src/app/giveaways/page.tsx
index e6d38c6..8a78db9 100644
--- a/src/app/giveaways/page.tsx
+++ b/src/app/giveaways/page.tsx
@@ -38,8 +38,12 @@ export default async function GiveawaysPage() {
{/* Header */}
-
- 🎁 Active Giveaways
+
+ 🎁
+ {" "}
+
+ Active Giveaways
+
{/* Grid of Cards */}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index 80694d5..ef66805 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -13,8 +13,12 @@ export default function GiveawaySystem() {
height={120}
className="mx-auto mb-4 rounded-full border-4 border-pink-400 shadow-lg"
/>
-
- 🎁 TCG Love Giveaway System
+
+ 🎁
+ {" "}
+
+ TCG Love Giveaway System
+
Join the fun — earn coins, win cool cards!