summaryrefslogtreecommitdiff
path: root/backend/src/routes
diff options
context:
space:
mode:
authorLeo Goetz <dev@leogtz.de>2026-01-22 09:10:15 +0100
committerLeo Goetz <dev@leogtz.de>2026-01-22 09:10:15 +0100
commit01c0f792484f8f52606eae0e58abe528acef3086 (patch)
treee30894caf65b39aab1e050035f63450b5032123c /backend/src/routes
parentb6d422d33c3b647ab249a8cf3520bc986fa2c549 (diff)
feat: completed course, added some types and changed output to dist folderHEADmaster
Diffstat (limited to 'backend/src/routes')
-rw-r--r--backend/src/routes/api.js12
-rw-r--r--backend/src/routes/api.ts10
-rw-r--r--backend/src/routes/events.ts (renamed from backend/src/routes/events.js)62
-rw-r--r--backend/src/routes/users.ts (renamed from backend/src/routes/users.js)42
4 files changed, 67 insertions, 59 deletions
diff --git a/backend/src/routes/api.js b/backend/src/routes/api.js
deleted file mode 100644
index 2eb07d1..0000000
--- a/backend/src/routes/api.js
+++ /dev/null
@@ -1,12 +0,0 @@
-import { Router } from 'express';
-import usersRouter from './users.js';
-import eventsRouter from './events.js';
-
-
-const router = Router();
-
-router.use('/users', usersRouter);
-router.use('/events', eventsRouter);
-
-
-export default router;
diff --git a/backend/src/routes/api.ts b/backend/src/routes/api.ts
new file mode 100644
index 0000000..92eae46
--- /dev/null
+++ b/backend/src/routes/api.ts
@@ -0,0 +1,10 @@
+import { Router } from "express";
+import usersRouter from "./users.js";
+import eventsRouter from "./events.js";
+
+const router = Router();
+
+router.use("/users", usersRouter);
+router.use("/events", eventsRouter);
+
+export default router;
diff --git a/backend/src/routes/events.js b/backend/src/routes/events.ts
index b95c747..df65eb5 100644
--- a/backend/src/routes/events.js
+++ b/backend/src/routes/events.ts
@@ -1,52 +1,56 @@
-import db from '../db.js';
-import { Router } from 'express';
-import { getUser } from './users.js';
+import db from "../db.js";
+import { Router } from "express";
+import { getUser } from "./users.js";
+import { type Event, type Id, type Rsvps, type User } from "../types.js";
const router = Router();
-const joinHost = (event) => {
- const host = getUser(event.host_id);
+const joinHost = (event: Event) => {
+ const host = getUser(event.host_id) as User;
return { ...event, host };
-}
+};
-const joinRSVPs = (event) => {
+const joinRSVPs = (event: Event) => {
const { id } = event;
- const getRSVPs = db.prepare('SELECT * FROM rsvps WHERE event_id = @id');
- const rsvps = getRSVPs.all({ id });
+ const getRSVPs = db.prepare("SELECT * FROM rsvps WHERE event_id = @id");
+ const rsvps = getRSVPs.all({ id }) as Rsvps[];
return { ...event, rsvps };
-}
+};
-const getEvent = (eventId) => {
- const byId = db.prepare('SELECT * FROM events WHERE id = @eventId');
- const event = byId.get({ eventId });
+const getEvent = (eventId: Id) => {
+ const byId = db.prepare("SELECT * FROM events WHERE id = @eventId");
+ const event = byId.get({ eventId }) as Event;
return joinHost(event);
-}
+};
-router.get('/', (_req, res) => {
+router.get("/", (_req, res) => {
const listEvents = db.prepare(`SELECT * FROM events`);
- const events = listEvents.all();
+ const events = listEvents.all() as Event[];
res.json(events.map(joinHost).map(joinRSVPs));
});
-const insertEvent = db.prepare(`INSERT INTO events VALUES (@id, @title, @description, @image_url, @date, @host_id)`);
+const insertEvent = db.prepare(
+ `INSERT INTO events VALUES (@id, @title, @description, @image_url, @date, @host_id)`,
+);
-router.post('/new', (req, res) => {
+router.post("/new", (req, res) => {
const data = req.body;
- const { lastInsertRowid: id } = insertEvent.run(data);
+ const { lastInsertRowid } = insertEvent.run(data);
+ const id = lastInsertRowid as number;
const event = getEvent(id);
res.status(201).json(event);
});
-router.get('/:id', (req, res) => {
+router.get("/:id", (req, res) => {
const id = parseInt(req.params.id);
const event = getEvent(id);
if (!event) {
- return res.status(404).json({ error: 'Event not found' });
+ return res.status(404).json({ error: "Event not found" });
}
res.json(event);
});
-router.patch('/:id', (req, res) => {
+router.patch("/:id", (req, res) => {
const eventId = parseInt(req.params.id);
const patch = req.body;
@@ -64,23 +68,27 @@ router.patch('/:id', (req, res) => {
res.json(updated);
});
-router.delete('/:id', (req, res) => {
+router.delete("/:id", (req, res) => {
const deleteEvent = db.prepare(`DELETE FROM events WHERE id = @eventId`);
const eventId = parseInt(req.params.id);
const event = getEvent(eventId);
if (!event) {
- return res.status(404).json({ error: 'Event not found' });
+ return res.status(404).json({ error: "Event not found" });
}
deleteEvent.run({ eventId });
res.json(event);
});
-router.post('/:id/rsvp', (req, res) => {
+router.post("/:id/rsvp", (req, res) => {
const eventId = parseInt(req.params.id);
const { name, email } = req.body;
- const getRSVP = db.prepare(`SELECT * FROM rsvps WHERE (event_id = ${eventId} AND email = '${email}')`);
- const insertRSVP = db.prepare(`INSERT INTO rsvps VALUES (@eventId, @name, @email)`);
+ const getRSVP = db.prepare(
+ `SELECT * FROM rsvps WHERE (event_id = ${eventId} AND email = '${email}')`,
+ );
+ const insertRSVP = db.prepare(
+ `INSERT INTO rsvps VALUES (@eventId, @name, @email)`,
+ );
let [rsvp] = getRSVP.all({ eventId, email });
if (rsvp) {
diff --git a/backend/src/routes/users.js b/backend/src/routes/users.ts
index 6d874e9..98ec361 100644
--- a/backend/src/routes/users.js
+++ b/backend/src/routes/users.ts
@@ -1,40 +1,42 @@
-import { Router } from 'express';
-import db from '../db.js';
+import { Router } from "express";
+import db from "../db.js";
+import type { User } from "../types.js";
const router = Router();
-export const getUser = (userId) => {
- const byId = db.prepare('SELECT * FROM users WHERE id = @userId');
+export const getUser = (userId: User["id"]) => {
+ const byId = db.prepare("SELECT * FROM users WHERE id = @userId");
return byId.get({ userId });
-}
+};
-router.get('/', (_req, res) => {
- const listUsers = db.prepare(`SELECT * FROM users`)
+router.get("/", (_req, res) => {
+ const listUsers = db.prepare(`SELECT * FROM users`);
const users = listUsers.all();
res.json(users);
});
-router.post('/new', (req, res) => {
+router.post("/new", (req, res) => {
const data = req.body;
- const cols = Object.keys(data).join(' , ');
- const vals = Object.values(data).join(' , ');
+ const cols = Object.keys(data).join(" , ");
+ const vals = Object.values(data).join(" , ");
const insertUser = db.prepare(`INSERT INTO users(@cols) VALUES (@vals)`);
- const { lastInsertRowid: id } = insertUser.run({ cols, vals });
+ const { lastInsertRowid } = insertUser.run({ cols, vals });
+ const id = lastInsertRowid as number;
const user = getUser(id);
res.json(user);
});
-router.get('/:id', (req, res) => {
- const id = req.params.id;
+router.get("/:id", (req, res) => {
+ const id = Number(req.params.id);
const user = getUser(id);
if (!user) {
- res.status(404).json({ error: 'User not found' });
+ res.status(404).json({ error: "User not found" });
}
res.json(user);
});
-router.patch('/:id', (req, res) => {
- const userId = req.params.id;
+router.patch("/:id", (req, res) => {
+ const userId = Number(req.params.id);
const patch = req.body;
const updateCol = db.prepare(`
@@ -43,7 +45,7 @@ router.patch('/:id', (req, res) => {
const updateUser = db.transaction((patch) => {
for (const [col, val] of Object.entries(patch)) {
updateCol.run(col, val, userId);
- };
+ }
});
updateUser(Object.entries(patch));
@@ -51,12 +53,12 @@ router.patch('/:id', (req, res) => {
res.json(updated);
});
-router.delete('/:id', (req, res) => {
- const deleteUser = db.prepare(`DELETE FROM users WHERE id = @userId`)
+router.delete("/:id", (req, res) => {
+ const deleteUser = db.prepare(`DELETE FROM users WHERE id = @userId`);
const userId = parseInt(req.params.id);
const user = getUser(userId);
if (!user) {
- res.status(404).json({ error: 'User not found' });
+ res.status(404).json({ error: "User not found" });
}
deleteUser.run({ userId });
res.json(user);