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