Update grade route.ts to Next 13

This commit is contained in:
timhaller 2023-12-04 10:41:48 +01:00
parent ecbd14a06c
commit 4e7efb327f
4 changed files with 97 additions and 17 deletions

View File

@ -1,25 +1,23 @@
import type { NextApiRequest, NextApiResponse } from 'next' import {NextResponse} from "next/server";
import prisma from '@lib/prisma'; import prisma from '@lib/prisma';
interface IBody { interface IBody {
key: string key: string
grade: number grade: number
} }
export default async function handler(req: NextApiRequest, res: NextApiResponse) { export async function POST(req: Request){
const body = req.body as IBody const body = await req.json() as IBody
if (req.method === 'POST') { await prisma.grade.findFirst({where: {key: body.key}}).then(async (grade) => {
// Process a POST request if (grade) {
await prisma.grade.findFirst({where: {key: body.key}}).then(async (grade) => { await prisma.grade.create({data: {test: 1, grade: body.grade, key: body.key}})
if (grade) { return new NextResponse(
await prisma.grade.create({data: {test: 1, grade: body.grade, key: body.key}}) JSON.stringify({message: 'Grade updated', cookie: 'voted=true'}), {status: 200}
res.status(200).json({message: 'Grade updated', cookie: 'voted=true'}) )
} else { } else {
res.status(404).json({message: 'Key not found'}) return new NextResponse(
} JSON.stringify({message: 'Key not found'}), {status: 404}
}) )
} else { }
// Handle any other HTTP method })
}
} }

53
app/results.tsx Normal file
View File

@ -0,0 +1,53 @@
"use server";
import {
Chart as ChartJS,
CategoryScale,
LinearScale,
Tooltip,
PointElement,
LineElement,
} from "chart.js";
import { Line } from "react-chartjs-2";
// Register ChartJS components using ChartJS.register
ChartJS.register(
CategoryScale,
LinearScale,
PointElement,
LineElement,
Tooltip
);
import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
function getGrades() {
return prisma.grade.findMany()
}
const results = async () => {
const grades = await getGrades()
const gradesArray = grades.map(grade => grade.grade.toString())
const allGrades = ["1", "1,5", "2", "2,5", "3", "3,5", "4", "4,5", "5", "5,5", "6"]
const gradesCount = allGrades.map(grade => gradesArray.filter(g => g === grade).length)
console.log(grades)
return (
<div>
<Line
data={{
labels: allGrades,
datasets: [
{
data: gradesCount,
backgroundColor: "purple",
},
],
}}
/>
</div>
);
};
export default results;

27
package-lock.json generated
View File

@ -9,9 +9,11 @@
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"@prisma/client": "^5.6.0", "@prisma/client": "^5.6.0",
"chart.js": "^4.4.0",
"next": "14.0.3", "next": "14.0.3",
"prisma": "^5.6.0", "prisma": "^5.6.0",
"react": "^18", "react": "^18",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18", "react-dom": "^18",
"socket.io": "^4.7.2", "socket.io": "^4.7.2",
"socket.io-client": "^4.7.2" "socket.io-client": "^4.7.2"
@ -198,6 +200,11 @@
"@jridgewell/sourcemap-codec": "^1.4.14" "@jridgewell/sourcemap-codec": "^1.4.14"
} }
}, },
"node_modules/@kurkle/color": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz",
"integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw=="
},
"node_modules/@next/env": { "node_modules/@next/env": {
"version": "14.0.3", "version": "14.0.3",
"resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz", "resolved": "https://registry.npmjs.org/@next/env/-/env-14.0.3.tgz",
@ -1079,6 +1086,17 @@
"url": "https://github.com/chalk/chalk?sponsor=1" "url": "https://github.com/chalk/chalk?sponsor=1"
} }
}, },
"node_modules/chart.js": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.0.tgz",
"integrity": "sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==",
"dependencies": {
"@kurkle/color": "^0.3.0"
},
"engines": {
"pnpm": ">=7"
}
},
"node_modules/chokidar": { "node_modules/chokidar": {
"version": "3.5.3", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
@ -3632,6 +3650,15 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/react-chartjs-2": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/react-chartjs-2/-/react-chartjs-2-5.2.0.tgz",
"integrity": "sha512-98iN5aguJyVSxp5U3CblRLH67J8gkfyGNbiK3c+l1QI/G4irHMPQw44aEPmjVag+YKTyQ260NcF82GTQ3bdscA==",
"peerDependencies": {
"chart.js": "^4.1.1",
"react": "^16.8.0 || ^17.0.0 || ^18.0.0"
}
},
"node_modules/react-dom": { "node_modules/react-dom": {
"version": "18.2.0", "version": "18.2.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",

View File

@ -10,9 +10,11 @@
}, },
"dependencies": { "dependencies": {
"@prisma/client": "^5.6.0", "@prisma/client": "^5.6.0",
"chart.js": "^4.4.0",
"next": "14.0.3", "next": "14.0.3",
"prisma": "^5.6.0", "prisma": "^5.6.0",
"react": "^18", "react": "^18",
"react-chartjs-2": "^5.2.0",
"react-dom": "^18", "react-dom": "^18",
"socket.io": "^4.7.2", "socket.io": "^4.7.2",
"socket.io-client": "^4.7.2" "socket.io-client": "^4.7.2"