diff --git a/prisma/migrations/20250329220850_/migration.sql b/prisma/migrations/20250329220850_/migration.sql new file mode 100644 index 0000000..21e404e --- /dev/null +++ b/prisma/migrations/20250329220850_/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "miis" ADD COLUMN "tags" TEXT[]; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 95b657b..aa0af65 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -62,8 +62,9 @@ model Session { model Mii { id BigInt @id @default(autoincrement()) userId String - name String + name String @db.VarChar(64) pictures String[] + tags String[] likes Int @default(0) createdAt DateTime @default(now()) diff --git a/src/app/components/like-button.tsx b/src/app/components/like-button.tsx new file mode 100644 index 0000000..f95030d --- /dev/null +++ b/src/app/components/like-button.tsx @@ -0,0 +1,31 @@ +"use client"; + +import { useState } from "react"; +import { redirect } from "next/navigation"; +import { Icon } from "@iconify/react"; + +interface Props { + likes: number; + isLoggedIn: boolean; +} + +export default function LikeButton({ likes, isLoggedIn }: Props) { + const [isLiked, setIsLiked] = useState(false); + const [likesState, setLikesState] = useState(likes); + + const onClick = () => { + if (!isLoggedIn) redirect("/login"); + + setIsLiked((prev) => !prev); + setLikesState((prev) => (isLiked ? prev - 1 : prev + 1)); + + // todo: update database + }; + + return ( + + ); +} diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 9e6e80a..0e5b53f 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -23,7 +23,7 @@ export default function RootLayout({
-
{children}
+
{children}
); diff --git a/src/app/page.tsx b/src/app/page.tsx index 20c453b..06bc61d 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -1,22 +1,59 @@ -export default function Page() { +import { auth } from "@/lib/auth"; +import { prisma } from "@/lib/prisma"; + +import LikeButton from "./components/like-button"; + +export default async function Page() { + const session = await auth(); + + const miiCount = prisma.mii.count(); + const miis = await prisma.mii.findMany({ + orderBy: { createdAt: "desc" }, + }); + return ( -
- {/* testing purposes only */} - {[...Array(12)].map((_, index) => ( -
- mii -
-

Frieren

-
- Anime - Test -
+
+
+

+ {miiCount} Miis +

+ +
+
+ + todo +
+ +
+ +
- ))} +
+ +
+ {miis.map((mii) => ( +
+ mii +
+

{mii.name}

+
+ {mii.tags.map((tag) => ( + {tag} + ))} +
+ + +
+
+ ))} +
); }