From a966bfffd9679f3661560c699625626aafca66cf Mon Sep 17 00:00:00 2001 From: Stefan-5422 <32109571+Stefan-5422@users.noreply.github.com> Date: Sun, 17 Oct 2021 02:30:01 +0200 Subject: [PATCH] Added Event Endpoints; Dotenv; npm Scripts + GET /events/ + POST /events/ --- README.md | 12 +++++++++ index.ts | 16 ------------ package-lock.json | 5 ++++ package.json | 5 +++- src/Controllers/event.controller.ts | 40 +++++++++++++++++++++++++++++ src/Routes/event.routes.ts | 9 +++++++ src/app.ts | 29 +++++++++++++++++++++ src/lib/prisma.ts | 8 ++++++ 8 files changed, 107 insertions(+), 17 deletions(-) delete mode 100644 index.ts create mode 100644 src/Controllers/event.controller.ts create mode 100644 src/Routes/event.routes.ts create mode 100644 src/app.ts create mode 100644 src/lib/prisma.ts diff --git a/README.md b/README.md index 00db566..67a50a4 100644 --- a/README.md +++ b/README.md @@ -1 +1,13 @@ # server + +## SETUP + +Before Runningthis on you local machine some things have to be setup + +1. Run npm install +2. Add .env file with following variables: + + ``` + DATABASE_URL: ADDRESS TO YOUR DATABASE + PORT: PORT WHERE THE API SHOULD RUN + ``` diff --git a/index.ts b/index.ts deleted file mode 100644 index 51c122f..0000000 --- a/index.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { PrismaClient } from "@prisma/client"; - -const prisma = new PrismaClient(); - -async function main() { - // ... you will write your Prisma Client queries here - console.log("Hello world!!"); -} - -main() - .catch((e) => { - throw e; - }) - .finally(async () => { - await prisma.$disconnect(); - }); diff --git a/package-lock.json b/package-lock.json index d59510d..fa369bf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -245,6 +245,11 @@ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true }, + "dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", diff --git a/package.json b/package.json index c2cb3e3..dcfa8ce 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "description": "", "main": "index.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "test": "echo \"Error: no test specified\" && exit 1", + "start": "ts-node src/app.ts", + "dev": "nodemon src/app.ts" }, "repository": { "type": "git", @@ -18,6 +20,7 @@ "homepage": "https://github.com/detleph/server#readme", "dependencies": { "@prisma/client": "^3.2.1", + "dotenv": "^10.0.0", "express": "^4.17.1" }, "devDependencies": { diff --git a/src/Controllers/event.controller.ts b/src/Controllers/event.controller.ts new file mode 100644 index 0000000..2cdaba3 --- /dev/null +++ b/src/Controllers/event.controller.ts @@ -0,0 +1,40 @@ +import { Request, Response } from "express"; +import prisma from "../lib/prisma"; + +const getAllEvents = async (req: Request, res: Response) => { + const events = await prisma.event.findMany({ + select: { + name: true, + date: true, + pid: true, + id: false, + }, + }); + if (events.length > 0) res.status(200).send(events); + else res.status(204).send(); +}; + +const addEvent = async (req: Request, res: Response) => { + // TODO: Add checks if user has admin permissions + + if (req.body.name == null || undefined || req.body.date == null || undefined) { + res.status(400).send("Malformed request"); + return; + } + + const event = await prisma.event.create({ + data: { + name: req.body.name, + date: req.body.date, + }, + select: { + name: true, + date: true, + pid: true, + id: false, + }, + }); + res.status(201).send(event); +}; + +export { getAllEvents, addEvent }; diff --git a/src/Routes/event.routes.ts b/src/Routes/event.routes.ts new file mode 100644 index 0000000..de0cfde --- /dev/null +++ b/src/Routes/event.routes.ts @@ -0,0 +1,9 @@ +import Express from "express"; +import { addEvent, getAllEvents } from "../Controllers/event.controller"; +const router = Express.Router(); + +router.get("/", getAllEvents); + +router.post("/", addEvent); + +export default router; diff --git a/src/app.ts b/src/app.ts new file mode 100644 index 0000000..b5bb664 --- /dev/null +++ b/src/app.ts @@ -0,0 +1,29 @@ +import express from "express"; +import prisma from "./lib/prisma"; +import eventRouter from "./Routes/event.routes"; + +require("dotenv").config(); // Load dotenv config + +const app = express(); + +async function main() { + // Todo: Everything + + // Bodyparser and urlencoded to parse post request bodies + app.use(express.urlencoded({ extended: true })); + app.use(express.json()); + + app.use("/api/events", eventRouter); + + app.listen(process.env.PORT, () => { + console.log(`Listening on Port: ${process.env.PORT}`); + }); +} + +main() + .catch((e) => { + throw e; + }) + .finally(async () => { + await prisma.$disconnect(); + }); diff --git a/src/lib/prisma.ts b/src/lib/prisma.ts new file mode 100644 index 0000000..431bfc0 --- /dev/null +++ b/src/lib/prisma.ts @@ -0,0 +1,8 @@ +import { PrismaClient } from "@prisma/client"; + +// See here: https://github.com/prisma/prisma-client-js/issues/228#issuecomment-618433162 +let prisma: PrismaClient; + +prisma = new PrismaClient(); + +export default prisma;