Skip to content
Snippets Groups Projects
Commit 56754586 authored by DESKTOP-9FO96TP\hehexd's avatar DESKTOP-9FO96TP\hehexd
Browse files

added Like Button, fixed Service(forgot awaits), removed console.logs

parent 01d2d9b0
No related branches found
No related tags found
2 merge requests!10Tweeting,!9Tweeting
Pipeline #34969 passed
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>
......
......@@ -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
}
}
......@@ -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
"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
......@@ -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)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment