From 60a054a4bb08d4bad99d2053f9072c367470f5df Mon Sep 17 00:00:00 2001 From: "Maurice L." Date: Wed, 7 May 2025 15:53:18 +0200 Subject: [PATCH] Added dynamic loading for every page --- api-backend/src/models/coaster.ts | 9 +++ api-backend/src/routes/coasterRoutes.ts | 14 ++++- src/router.ts | 4 +- src/views/app/coasters/Coaster.vue | 77 ++++++++++++++++++------- src/views/app/parks/Park.vue | 64 ++++++++++++++------ src/views/app/parks/Parks.vue | 25 +++++--- 6 files changed, 143 insertions(+), 50 deletions(-) diff --git a/api-backend/src/models/coaster.ts b/api-backend/src/models/coaster.ts index 1a87dbb..8422d88 100644 --- a/api-backend/src/models/coaster.ts +++ b/api-backend/src/models/coaster.ts @@ -11,6 +11,15 @@ export const getCoasters = (): Promise => { }); }; +export const getCoastersByPark = (id: number): Promise => { + return new Promise((resolve, reject) => { + db.all("SELECT * FROM coasters WHERE park_id = ?", [id], (err, rows) => { + if (err) reject(err); + else resolve(rows); + }); + }); +}; + export const getCoasterById = (id: number): Promise => { return new Promise((resolve, reject) => { db.get("SELECT * FROM coasters WHERE id = ?", [id], (err, row) => { diff --git a/api-backend/src/routes/coasterRoutes.ts b/api-backend/src/routes/coasterRoutes.ts index b6d4ed0..239a994 100644 --- a/api-backend/src/routes/coasterRoutes.ts +++ b/api-backend/src/routes/coasterRoutes.ts @@ -1,5 +1,5 @@ import { Router } from 'express'; -import { getCoasters, getCoasterById } from '../models/coaster.js'; +import { getCoasters, getCoasterById, getCoastersByPark } from '../models/coaster.js'; const router = Router(); @@ -14,6 +14,18 @@ router.get('/', async (req, res) => { } }); +// Alle Achterbahnen eines Parks anzeigen +router.get('/p/:id', async (req, res) => { + const { id } = req.params; + try { + const coasters = await getCoastersByPark(Number(id)); + res.json(coasters); + } catch (err) { + console.error('Fehler beim Abrufen der Achterbahnen:', err); + res.status(500).json({ message: 'Fehler beim Abrufen der Achterbahnen' }); + } +}); + // Achterbahn nach ID anzeigen router.get('/:id', async (req, res) => { const { id } = req.params; diff --git a/src/router.ts b/src/router.ts index 53595e4..136269f 100644 --- a/src/router.ts +++ b/src/router.ts @@ -36,7 +36,7 @@ const routes: Array = [ component: () => import('./views/app/coasters/Coasters.vue') }, { - path: '/app/coaster/:coasterId', + path: '/app/coaster/:id', component: () => import('./views/app/coasters/Coaster.vue') }, @@ -46,7 +46,7 @@ const routes: Array = [ component: () => import('./views/app/parks/Parks.vue') }, { - path: '/app/park/:parkId', + path: '/app/park/:id', component: () => import('./views/app/parks/Park.vue') }, diff --git a/src/views/app/coasters/Coaster.vue b/src/views/app/coasters/Coaster.vue index e527a0d..a654ab0 100644 --- a/src/views/app/coasters/Coaster.vue +++ b/src/views/app/coasters/Coaster.vue @@ -3,29 +3,64 @@ import Header from '../../../components/app/AppHeader.vue' import Sidebar from '../../../components/app/AppSidebar.vue' export default { - components: { - Header, - Sidebar - }, - data() { - return { - coaster: { - name: "Blue Fire", - park: "Europa Park", - length: "1050 m", - height: "38 m", - speed: "100 km/h", - launch: "LSM-Launch", - inversions: 4, - duration: "2:30 min", - manufacturer: "MACK Rides", - opened: "2009" - } - }; + components: { + Header, + Sidebar + }, + data() { + return { + coaster: { + name: '', + park: '', + length: '', + height: '', + speed: '', + launch: '', + inversions: 0, + duration: '', + manufacturer: '', + opened: '', + video_key: '', + park_id: 0 + } + }; + }, + async mounted() { + const coasterId = this.$route.params.id; + + try { + // Coaster-Daten laden + const coasterRes = await fetch(`http://localhost:3000/api/coasters/${coasterId}`); + if (!coasterRes.ok) throw new Error('Fehler beim Laden des Coasters'); + const coasterData = await coasterRes.json(); + + // Parkname holen + const parkRes = await fetch(`http://localhost:3000/api/parks/${coasterData.park_id}`); + if (!parkRes.ok) throw new Error('Fehler beim Laden des Parks'); + const parkData = await parkRes.json(); + + this.coaster = { + name: coasterData.name, + park: parkData.name, + length: `${coasterData.length} m`, + height: `${coasterData.height} m`, + speed: `${coasterData.velocity} km/h`, + launch: coasterData.type, + inversions: coasterData.inversions, + duration: `${coasterData.duration} min`, + manufacturer: coasterData.manufacturer, + opened: `${coasterData.release_year}`, + video_key: coasterData.video_key, + park_id: coasterData.park_id + }; + } catch (err) { + console.error(err); } + } }; +