From 5b6a46d81b678c520114256294c5e01e8dc78653 Mon Sep 17 00:00:00 2001 From: "Maurice L." Date: Wed, 7 May 2025 15:24:49 +0200 Subject: [PATCH] Added Datebase to attractions --- api-backend/src/index.ts | 3 +++ package-lock.json | 14 ++++++++++- package.json | 1 + src/views/app/coasters/Coasters.vue | 39 +++++++++++++++++++++-------- 4 files changed, 45 insertions(+), 12 deletions(-) diff --git a/api-backend/src/index.ts b/api-backend/src/index.ts index 5f40ef6..ab052a5 100644 --- a/api-backend/src/index.ts +++ b/api-backend/src/index.ts @@ -1,4 +1,5 @@ import express from 'express'; +import cors from 'cors'; import pathRoutes from './routes/parkRoutes.js'; import coasterRoutes from './routes/coasterRoutes.js'; @@ -8,6 +9,8 @@ const port = 3000; // Middleware für JSON-Anfragen app.use(express.json()); +app.use(cors()); + // Routen hinzufügen app.use('/api/parks', pathRoutes); app.use('/api/coasters', coasterRoutes); diff --git a/package-lock.json b/package-lock.json index e14abb7..befbc47 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "name": "coasterdb", "version": "0.0.0", "dependencies": { + "cors": "^2.8.5", "express": "^5.1.0", "sqlite3": "^5.1.7", "vue": "^3.5.13" @@ -2179,6 +2180,18 @@ "node": ">=6.6.0" } }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, "node_modules/cosmiconfig": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", @@ -4076,7 +4089,6 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "dev": true, "engines": { "node": ">=0.10.0" } diff --git a/package.json b/package.json index fdde8cf..722039c 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "api-backend": "cross-env TS_NODE_PROJECT=./api-backend/tsconfig.json node --loader ts-node/esm api-backend/src/index.ts" }, "dependencies": { + "cors": "^2.8.5", "express": "^5.1.0", "sqlite3": "^5.1.7", "vue": "^3.5.13" diff --git a/src/views/app/coasters/Coasters.vue b/src/views/app/coasters/Coasters.vue index 7825060..59cc1ad 100644 --- a/src/views/app/coasters/Coasters.vue +++ b/src/views/app/coasters/Coasters.vue @@ -9,12 +9,30 @@ export default { }, data() { return { - coasters: [ - { name: 'Blue Fire', park: 'Europa Park' }, - { name: 'Taron', park: 'Phantasialand' }, - { name: 'Silver Star', park: 'Europa Park' }, - { name: 'Karacho', park: 'Erlebnispark Tripsdrill' } - ] + coasters: [] as { id: number; name: string; location: string; average_visitor_count: number; ticket_price: string, park_id: number, park_name?: string }[] + } + }, + async mounted() { + try { + const response = await fetch('http://localhost:3000/api/coasters'); + if (response.ok) { + const data = await response.json(); + this.coasters = await Promise.all(data.map(async (coaster: { [x: string]: any; id: number; name: string; location: string; average_visitor_count: number; ticket_price: string, park_id: number }) => { + // Hole den Parknamen anhand der park_id + const parkResponse = await fetch(`http://localhost:3000/api/parks/${coaster.park_id}`); + if (parkResponse.ok) { + const parkData = await parkResponse.json(); + coaster.park_name = parkData.name; // Füge den Parknamen zum Coaster hinzu + } else { + console.error(`Fehler beim Laden des Parks mit ID ${coaster.park_id}`); + } + return coaster; + })); + } else { + console.error('Fehler beim Laden der Achterbahnen:', response.statusText); + } + } catch (error) { + console.error('Fehler beim Abrufen der Achterbahnen:', error); } } } @@ -34,23 +52,22 @@ export default {

{{ coaster.name }}

- Park: {{ coaster.park }} + Park: {{ coaster.park_name || 'Unbekannt' }}

- - +