diff --git a/app/(content)/(home)/home/page.tsx b/app/(content)/(home)/home/page.tsx index f1bc58ea54fa018d41713a250d8bbfc795ab9ed4..9e2171592672784fa90f82f1e9d3fa0399a6b925 100644 --- a/app/(content)/(home)/home/page.tsx +++ b/app/(content)/(home)/home/page.tsx @@ -1,6 +1,8 @@ +import LikeButton from "@/components/LikeButton"; import PostMessageForm from "@/components/PostMessageForm"; import { prisma } from "@/prisma/db"; import { Prisma} from "@prisma/client" +type likeType = Prisma.LikeUncheckedCreateInput type messageType = Prisma.MessageUncheckedCreateInput type messageItemProps = { msg: messageType; @@ -24,7 +26,8 @@ export default async function HomePage() { <h1>Home WIP</h1> <p>This will be where all messages show up.</p> <p>Needs a reload after posting!!</p> - <PostMessageForm data={messages}></PostMessageForm> + {/* <PostMessageForm data={messages}></PostMessageForm> */} + <PostMessageForm data={messages}/> {messages ? <> {messages.map((msg) => ( @@ -38,26 +41,10 @@ export default async function HomePage() { ) } -/* const MessageItem = ({ msg }: messageItemProps) => { - return ( - <div className="flex border-b border-gray-200 py-4"> - <div className="flex-shrink-0"> - <div className="h-10 w-10 rounded-full bg-gray-300"></div> - </div> - <div className="ml-4"> - <div className="flex items-center"> - <span className="font-bold mr-2">{msg.author}</span> - <span className="text-gray-500 text-sm"> - {formatDate(new Date(msg.sentAt!))} - </span> - </div> - <div className="text-gray-800">{msg.content}</div> - </div> - </div> - ); - }; */ - const MessageItem = ({ msg }: messageItemProps) => { + if(!msg.id){ + return <div></div> + } return ( <div className="flex border-b border-gray-200 py-4"> <div className="flex-shrink-0"> @@ -79,9 +66,11 @@ export default async function HomePage() { {/* potential Image */} </div> </div> - </div> - + <LikeButton data={{ + postId: msg.id, + author: msg.author + }}/> <span className="text-gray-600">Like Count: {msg.likeCount} | <span className="text-gray-600">ReplyButton (Number of Replies)</span></span> </div> </div> diff --git a/app/api/likes/likeService.ts b/app/api/likes/likeService.ts index 9368aafd101f916a254047ee2f5df36c269e5738..7b5b87f1ec81cfe2ffdd14a5df29b51f4c8b9f0e 100644 --- a/app/api/likes/likeService.ts +++ b/app/api/likes/likeService.ts @@ -9,7 +9,7 @@ type likeType = Prisma.LikeUncheckedCreateInput * */ -export async function putLike(like: likeType){ +export async function putLike(like: likeType): Promise<likeType | undefined> { //check if like exists by this user and for this post // if exists delete //if not create @@ -23,42 +23,47 @@ export async function putLike(like: likeType){ }) if(actualLike == null){ + console.log("like is null") throw Error("Message was not liked by this user") } - prisma.like.delete({ + await prisma.like.delete({ where: { - id: actualLike?.id + id: actualLike.id } }) - prisma.message.update({ + const msg = await prisma.message.update({ where: { id: like.postId }, data:{ - likeCount: {increment: 1} + likeCount: {increment: -1} } }) + return undefined; + } catch{ - prisma.like.create({ + + const createdLike = await prisma.like.create({ data:{ postId: like.postId, - author: like.author, - gameId: like.gameId + author: like.author } }) - prisma.message.update({ + const updatedMessage = await prisma.message.update({ where: { id: like.postId }, data:{ - likeCount: {increment: -1} + likeCount: {increment: 1} } }) - } + return createdLike + } + } diff --git a/app/api/likes/route.ts b/app/api/likes/route.ts index 3d144b0eee51aad7f3dece459635f1db8493143f..15c6d33000e90db02e37fbc3deb48c296d3f9a99 100644 --- a/app/api/likes/route.ts +++ b/app/api/likes/route.ts @@ -9,32 +9,13 @@ export async function PUT(req: NextRequest) { const data:like = await req.json() console.log("router data: " + data, "status:") - - console.log(data) try { - await putLike(data) + + const msg = await putLike(data) return NextResponse.json({ status: 200, message: 'Like handled' }) } catch (error) { console.log("fail" + error); return NextResponse.json(error, { status: 500 }); } -} - -export async function DELETE(req: NextRequest, res:NextResponse) { - const data = await req.json() - console.log("router data: " + data, "status:") - - console.log(data) - try { - const messages = await prisma.message.findMany({ - - }) - - return NextResponse.json({ status: 200, messages: messages }) - } catch (error) { - console.log("fail" + error); - // res.status(400) - } - console.log("get") } \ No newline at end of file diff --git a/components/LikeButton.tsx b/components/LikeButton.tsx new file mode 100644 index 0000000000000000000000000000000000000000..c99f7d3072a5f5fb310de42afee4b7015b74dec1 --- /dev/null +++ b/components/LikeButton.tsx @@ -0,0 +1,43 @@ +"use client" + +import { Message } from "@prisma/client" +import { useRouter } from "next/navigation"; +import { prisma } from "@/prisma/db"; +import { Prisma} from "@prisma/client" +type likeType = Prisma.LikeUncheckedCreateInput + +import { startTransition, useState } from "react" + +export default function LikeButton(props: { data: likeType }) { + const router = useRouter(); + + async function postLike(e: any) { + e.preventDefault() + const msgLikeData = props.data; + const likeData = {} as likeType + likeData.author = msgLikeData.author + likeData.postId = msgLikeData.postId + + const response = await fetch('http://localhost:3000/api/likes', { + method: 'PUT', + body: JSON.stringify(likeData) + }) + + startTransition(() => { + // Refresh the current route and fetch new data from the server without + // losing client-side browser or React state. + router.refresh(); + }); + return await response.json() + } + + return ( + <div> + <form onSubmit={postLike}> + <button type="submit" className="mt-2 bg-gray-300 text-gray-800 px-4 py-2 rounded float-right"> + Like + </button> + </form> + </div> + ) +} \ No newline at end of file diff --git a/components/PostMessageForm.tsx b/components/PostMessageForm.tsx index 29a2db3edadb2939246077699d119fae5efb7b3b..e45e09bd0faf53cb23609e267b26ef1f748b90df 100644 --- a/components/PostMessageForm.tsx +++ b/components/PostMessageForm.tsx @@ -19,7 +19,6 @@ export default function PostMessageForm(props: { data: Message[] | null }) { // setMessages([...messagesState, formData]) console.log(formData) formData.author = "Default Author" - formData.likeCount = 0; const response = await fetch('http://localhost:3000/api/messages', { method: 'POST', body: JSON.stringify(formData)