From b6abb261c457d7ed959fa339f80d3dbf04f7574b Mon Sep 17 00:00:00 2001 From: "DESKTOP-9FO96TP\\hehexd" <davidjakszta@outlook.de> Date: Sun, 14 May 2023 19:18:50 +0200 Subject: [PATCH] created MessageListPage, created Api Route for Messages with Post request, dataBase created --- app/api/messages/route.ts | 56 ++++++++++++++++++ app/messages/PostMessageForm.tsx | 29 +++++++++ app/messages/page.tsx | 33 +++++++++-- prisma/db.ts | 13 ++++ prisma/dev.db | Bin 20480 -> 24576 bytes .../migration.sql | 16 +++++ .../migrations/20230512142522_/migration.sql | 16 +++++ prisma/schema.prisma | 8 +-- 8 files changed, 163 insertions(+), 8 deletions(-) create mode 100644 app/api/messages/route.ts create mode 100644 app/messages/PostMessageForm.tsx create mode 100644 prisma/db.ts create mode 100644 prisma/migrations/20230512134632_message_change_required_fields/migration.sql create mode 100644 prisma/migrations/20230512142522_/migration.sql diff --git a/app/api/messages/route.ts b/app/api/messages/route.ts new file mode 100644 index 0000000..e051b55 --- /dev/null +++ b/app/api/messages/route.ts @@ -0,0 +1,56 @@ +import {PrismaClient} from "@prisma/client" +import { NextApiRequest, NextApiResponse } from "next" +import { NextRequest, NextResponse } from "next/server" +import { prisma } from './../../../prisma/db' + +export async function GET(req: NextRequest){ + return NextResponse.json("") +} + +export async function POST(req: NextRequest, res: NextResponse){ + const data = await req.json() + console.log("router data: " + data, "status:") + + console.log(data) + try { + await prisma.message.create({ + data: data + }) + + return NextResponse.json({status: 201, message: 'Message Created'}) + //res.status(200).json({message: 'Message Created'}) + //res.status(200).json({message: 'Message Created'}) + } catch (error) { + console.log("Failure" + error); + // res.status(400) + } + console.log("post") + + +} + +/* +export default async function handler(req: NextApiRequest, res: NextApiResponse){ + const data = (req.body) + + try { + await prisma.message.create({ + data + }) + res.status(200).json({message: 'Note Created'}) + } catch (error) { + console.log("Failure"); + } +} */ + +/* export const postMessage = async(req: NextApiRequest , res: NextApiResponse) => { +const data = (req.body) + +console.log("router data: " + data) + +const createdMessage = await prisma.message.create({ + data +}) + +res.status(201) +} */ \ No newline at end of file diff --git a/app/messages/PostMessageForm.tsx b/app/messages/PostMessageForm.tsx new file mode 100644 index 0000000..3a10ea8 --- /dev/null +++ b/app/messages/PostMessageForm.tsx @@ -0,0 +1,29 @@ +"use client" + +import { useState } from "react" +import { PrismaClient, Message } from "@prisma/client" + +export default function PostMessageForm(props: {data: Message[]}){ + const [formData, setFormData] = useState({}) + const [messagesState, setMessages] = useState(props.data) + + async function postMessage(e:any) { + e.preventDefault() + /* setMessages([...messagesState, formData]) */ + console.log(formData) + const response = await fetch('http://localhost:3000/api/messages', { + method: 'POST', + body: JSON.stringify(formData) + }) + return await response.json() + } + + return (<div> + <form onSubmit={postMessage}> + <input type="text" placeholder="content" name="content" onChange={e => setFormData({ ...formData, content : e.target.value })}/> + <textarea name="content" id="" cols={30} rows={10} placeholder="content" onChange={e => setFormData({ ...formData, content: e.target.value })} /> + <button type="submit">Post Message</button> + </form> + + </div>) +} \ No newline at end of file diff --git a/app/messages/page.tsx b/app/messages/page.tsx index 72cb1aa..f8ad89a 100644 --- a/app/messages/page.tsx +++ b/app/messages/page.tsx @@ -1,8 +1,14 @@ -import { PrismaClient } from "@prisma/client" +import { Message } from "@prisma/client" +import React from "react" +import PostMessageForm from "./PostMessageForm"; +import { prisma } from "@/prisma/db"; -const prisma = new PrismaClient() +// Define a type for our props +interface MessageProps { + data: Message[]; +} -export default async function MessageList() { +export default async function MessageList({data}:MessageProps) { const messages = await prisma.message.findMany() @@ -10,8 +16,27 @@ export default async function MessageList() { <div> Message List Page {messages.map((msg) => ( - <li key = "msg.id"> author: {msg.author} message: {msg.content} </li> + <li key = {msg.id}> author: {msg.author} message: {msg.content} sentAt: {msg.sentAt?.toString()} </li> ))} + + <PostMessageForm data={messages}></PostMessageForm> </div> ) +} + +export async function getServerSideProps() { + const formData = {description: 'sdfsdf', content: 'sdfsdf'} + const response = await fetch('/api/messages', { + method: 'POST', + body: JSON.stringify(formData) +}) + console.log("answer:" + await response.json()) + + const messages = await prisma.message.findMany() + + return { + props: { + data: messages + } + } } \ No newline at end of file diff --git a/prisma/db.ts b/prisma/db.ts new file mode 100644 index 0000000..51426ed --- /dev/null +++ b/prisma/db.ts @@ -0,0 +1,13 @@ +import { PrismaClient } from '@prisma/client' + +const globalForPrisma = global as unknown as { + prisma: PrismaClient | undefined +} + +export const prisma = + globalForPrisma.prisma ?? + new PrismaClient({ + log: ['query'], + }) + +if (process.env.NODE_ENV !== 'production') globalForPrisma.prisma = prisma \ No newline at end of file diff --git a/prisma/dev.db b/prisma/dev.db index ce99df3791151e84ea5fb396cfff5ba87d643675..2e1fad2ef8afc8f7be55d1de65ec98f11b426a62 100644 GIT binary patch delta 1215 zcma)6TWb?R6rN4on8wXcqe!h0T~ozdqr0=SmxxfK1`)j0ctOQ5J2P7gQLw36M2Klc zf=|j8^uY%O@kzXpXF>2y^hHD>B3^z%1reW|X{t!E(6f7H4&V9qoNs4_xq45z`a-#x z&8z?bBxYO@bMjWd-LnF0K5!+iJp>E1GDyFNEv>A*TD0w1<9Vv6Jycfr^z|v%M6gT- z6X!=sQ03?NrOG~DtC699!v#ABOT}`@C>M9^Eg3mUir#96*7m0iVYwl4mhWLXqg*;( zo`FV(N2|PpL^SP0_l1|W!Oid|SksfuD%Y&(cCu9>A(aC#KAuS|lv2jK#4I=y!_iZ% zHvcBA`)L|W#dQO~qxvJ=Xl1$=>-9!gJawdzRyP5lc2Q(nCL>lJQO@(&M>roK6X$(5 zv?wAb@;LK}S>W9ExlaoL4lIsr+vOhN#CCk!bO;GTY&pmaea8;C6Y@fcn9nixXaQM{ z((FF5@g6df;996|VdNlGk!bE+V_j@o%#ajgQ!l^;6Xk7$Xdb&h%LmM*dE#4^Pl!VU z?joNuTSy`%_WZ!)xPTBAod{z*K-3JF=LmsrfnpvKkD!p5h%$s6&lb{|;y1h9ySM+S zv25(xsB*Tm!xegloEzem5q|!{@Cav>aF|zFO-OYozeYz_Jx;~pbpW5hHoV@-7-Mj7 zef)?rpEZn2;(Y!u7PYtZ8%c-(d<!4INjL#VAb|%V)?e#Q@r3#=JtuZj(d#*RO8QiF zf9aU9uXOluad$~+E}#0cp)-o)9E{IJ$@pBHoAGIhWPDm87`uf3r_0ChbxHa7eeNRd zs${gQg5k>|y{cMcA*+QFo_y081)de&BXWOImm`_F90~Ze@C`C0KK%R2>_}UwPfvod zRrqRIySI@_idYsKyEsNKD$Q*12keY`qiZ_X3qYrk-bl^{7S09|vw(OKq=f-hX=*36 z{lEHSNzf}yRikGEOQV+qI}=j?PQh=j%=Qm(-Ad)3>qCpjv$2`01l*7^rO90uN9hiX I9t@oN4POyFT>t<8 delta 200 zcmZoTz}T>Wae}lUGXnzyD-go~(?lI(QDz1`{~BKY9}Fx!Aq>3N_&4(`;|bX;DDZ%L zatKclSCcL?ySTJ8V~gSBD?G)Muki`6rzhs7dZs8%zQ`xaR+3qglL}@|F6Pza@beE* z@C)_v*}Q-^g^7)kKa7DtY_p((5C7ya`E@}44F>)jn*|-t@lU>?ufxH_zl4GR68{pQ p$PE6;OX6cDIk2&OX5jw}6u81aae^o>HzTt&qi<?)abkKZ699|<HqZb7 diff --git a/prisma/migrations/20230512134632_message_change_required_fields/migration.sql b/prisma/migrations/20230512134632_message_change_required_fields/migration.sql new file mode 100644 index 0000000..377bf2b --- /dev/null +++ b/prisma/migrations/20230512134632_message_change_required_fields/migration.sql @@ -0,0 +1,16 @@ +-- RedefineTables +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Message" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "author" TEXT, + "gameId" TEXT, + "title" TEXT, + "content" TEXT NOT NULL, + "sentAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME +); +INSERT INTO "new_Message" ("author", "content", "gameId", "id", "sentAt", "title", "updatedAt") SELECT "author", "content", "gameId", "id", "sentAt", "title", "updatedAt" FROM "Message"; +DROP TABLE "Message"; +ALTER TABLE "new_Message" RENAME TO "Message"; +PRAGMA foreign_key_check; +PRAGMA foreign_keys=ON; diff --git a/prisma/migrations/20230512142522_/migration.sql b/prisma/migrations/20230512142522_/migration.sql new file mode 100644 index 0000000..1c2d1c7 --- /dev/null +++ b/prisma/migrations/20230512142522_/migration.sql @@ -0,0 +1,16 @@ +-- RedefineTables +PRAGMA foreign_keys=OFF; +CREATE TABLE "new_Message" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "author" TEXT, + "gameId" TEXT, + "title" TEXT, + "content" TEXT NOT NULL, + "sentAt" DATETIME DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME +); +INSERT INTO "new_Message" ("author", "content", "gameId", "id", "sentAt", "title", "updatedAt") SELECT "author", "content", "gameId", "id", "sentAt", "title", "updatedAt" FROM "Message"; +DROP TABLE "Message"; +ALTER TABLE "new_Message" RENAME TO "Message"; +PRAGMA foreign_key_check; +PRAGMA foreign_keys=ON; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 996e5ab..ba5b352 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -12,10 +12,10 @@ datasource db { model Message{ id Int @id @default(autoincrement()) - author String - gameId String - title String + author String? + gameId String? + title String? content String - sentAt DateTime @default(now()) + sentAt DateTime? @default(now()) updatedAt DateTime? @updatedAt } \ No newline at end of file -- GitLab