diff --git a/app/api/messages/route.ts b/app/api/messages/route.ts new file mode 100644 index 0000000000000000000000000000000000000000..e051b55ecc48f76cddfc9f5b1fd62483f6d56fa7 --- /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 0000000000000000000000000000000000000000..3a10ea81f4fd8f3e851f7a1f436eb1c019764822 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..f8ad89acdba6a504e91ff9b768a77b41db5b2053 --- /dev/null +++ b/app/messages/page.tsx @@ -0,0 +1,42 @@ +import { Message } from "@prisma/client" +import React from "react" +import PostMessageForm from "./PostMessageForm"; +import { prisma } from "@/prisma/db"; + +// Define a type for our props +interface MessageProps { + data: Message[]; +} + +export default async function MessageList({data}:MessageProps) { + + const messages = await prisma.message.findMany() + + return ( + <div> + Message List Page + {messages.map((msg) => ( + <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/package-lock.json b/package-lock.json index 275e0d9dad69792f5c1549fa76b80eea72554fb8..0dfe3c726fc174ea479bc054358fa7f344a51a40 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1021,6 +1021,26 @@ "url": "https://opencollective.com/popperjs" } }, + "node_modules/@prisma/client": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-4.13.0.tgz", + "integrity": "sha512-YaiiICcRB2hatxsbnfB66uWXjcRw3jsZdlAVxmx0cFcTc/Ad/sKdHCcWSnqyDX47vAewkjRFwiLwrOUjswVvmA==", + "hasInstallScript": true, + "dependencies": { + "@prisma/engines-version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a" + }, + "engines": { + "node": ">=14.17" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, "node_modules/@prisma/engines": { "version": "4.14.1", "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-4.14.1.tgz", @@ -1028,6 +1048,11 @@ "dev": true, "hasInstallScript": true }, + "node_modules/@prisma/engines-version": { + "version": "4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-4.13.0-50.1e7af066ee9cb95cf3a403c78d9aab3e6b04f37a.tgz", + "integrity": "sha512-fsQlbkhPJf08JOzKoyoD9atdUijuGBekwoOPZC3YOygXEml1MTtgXVpnUNchQlRSY82OQ6pSGQ9PxUe4arcSLQ==" + }, "node_modules/@rushstack/eslint-patch": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.2.0.tgz", diff --git a/package.json b/package.json index 1f745ec8a5b40a32eecd12e7116567040af440e3..bdaa2dcca07cf94008b15a86362b2d13910376dc 100644 --- a/package.json +++ b/package.json @@ -29,4 +29,4 @@ "devDependencies": { "prisma": "^4.14.1" } -} \ No newline at end of file +} diff --git a/prisma/db.ts b/prisma/db.ts new file mode 100644 index 0000000000000000000000000000000000000000..51426edb3a8b60e8b1790015eec12a05d3693d94 --- /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 new file mode 100644 index 0000000000000000000000000000000000000000..2e1fad2ef8afc8f7be55d1de65ec98f11b426a62 Binary files /dev/null and b/prisma/dev.db differ diff --git a/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql b/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql new file mode 100644 index 0000000000000000000000000000000000000000..226e0e7ceac31028ab4399db2ac4f840a7d0c2e1 --- /dev/null +++ b/prisma/migrations/20230512042440_first_migration_message_schema/migration.sql @@ -0,0 +1,10 @@ +-- CreateTable +CREATE TABLE "Message" ( + "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "author" TEXT NOT NULL, + "gameId" TEXT NOT NULL, + "title" TEXT NOT NULL, + "content" TEXT NOT NULL, + "sentAt" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" DATETIME +); 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 0000000000000000000000000000000000000000..377bf2b554c72a099334896114888a817bac9d16 --- /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 0000000000000000000000000000000000000000..1c2d1c7b51b6a4aa7af3f8edcedc8fa2ce941fc8 --- /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/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000000000000000000000000000000000000..e5e5c4705ab084270b7de6f45d5291ba01666948 --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "sqlite" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d205f42a46dfcedcfcb3b895322b158b60074cf1..ba5b3522bffb80144e6db7595ac1d287277ec829 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -6,6 +6,16 @@ generator client { } datasource db { - provider = "postgresql" + provider = "sqlite" url = env("DATABASE_URL") } + +model Message{ + id Int @id @default(autoincrement()) + author String? + gameId String? + title String? + content String + sentAt DateTime? @default(now()) + updatedAt DateTime? @updatedAt +} \ No newline at end of file