fix: remove likes property in mii model

This commit is contained in:
trafficlunar 2025-03-31 20:20:16 +01:00
parent 2fdf120280
commit 8f731dd358
5 changed files with 28 additions and 30 deletions

View file

@ -47,7 +47,6 @@ CREATE TABLE "miis" (
"name" VARCHAR(64) NOT NULL,
"pictures" TEXT[],
"tags" TEXT[],
"likes" INTEGER NOT NULL DEFAULT 0,
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT "miis_pkey" PRIMARY KEY ("id")

View file

@ -66,7 +66,6 @@ model Mii {
name String @db.VarChar(64)
pictures String[]
tags String[]
likes Int @default(0)
createdAt DateTime @default(now())

View file

@ -21,7 +21,7 @@ export async function PATCH(request: Request) {
});
if (existingLike) {
// Delete the like if it exists
// Remove the like if it exists
await tx.like.delete({
where: {
userId_miiId: {
@ -30,31 +30,21 @@ export async function PATCH(request: Request) {
},
},
});
const updatedMii = await tx.mii.update({
where: { id: miiId },
data: { likes: { decrement: 1 } },
select: { likes: true },
});
return { liked: false, count: updatedMii.likes };
} else {
// Create a new like if it doesn't exist
// Add a like if it doesn't exist
await tx.like.create({
data: {
userId: Number(session.user.id),
miiId,
},
});
}
const updatedMii = await tx.mii.update({
where: { id: miiId },
data: { likes: { increment: 1 } },
select: { likes: true },
const likeCount = await tx.like.count({
where: { miiId },
});
return { liked: true, count: updatedMii.likes };
}
return { liked: !existingLike, count: likeCount };
});
return Response.json({ success: true, liked: result.liked, count: result.count });

View file

@ -75,11 +75,15 @@ export default async function MiiList({ searchParams, userId }: Props) {
userId: true,
},
},
_count: {
select: { likedBy: true },
},
},
});
const formattedMiis = miis.map((mii) => ({
...mii,
likes: mii._count.likedBy,
isLikedByUser: mii.likedBy.length > 0, // True if the user has liked the Mii
}));

View file

@ -10,7 +10,7 @@ interface Props {
params: Promise<{ slug: string }>;
}
export default async function ProfilePage({ params }: Props) {
export default async function MiiPage({ params }: Props) {
const { slug } = await params;
const session = await auth();
@ -25,14 +25,14 @@ export default async function ProfilePage({ params }: Props) {
username: true,
},
},
},
});
const isLiked = await prisma.like.findUnique({
likedBy: {
where: {
userId_miiId: {
userId: Number(session?.user.id),
miiId: Number(slug),
},
select: { userId: true },
},
_count: {
select: { likedBy: true }, // Get total like count
},
},
});
@ -61,7 +61,13 @@ export default async function ProfilePage({ params }: Props) {
</div>
<div className="mt-auto">
<LikeButton likes={mii?.likes ?? 0} miiId={mii?.id} isLiked={isLiked != null} isLoggedIn={session?.user != null} big />
<LikeButton
likes={mii?._count.likedBy ?? 0}
miiId={mii?.id}
isLiked={(mii?.likedBy ?? []).length > 0}
isLoggedIn={session?.user != null}
big
/>
</div>
</div>
</div>