Added Datebase to attractions
This commit is contained in:
@@ -1,4 +1,5 @@
|
|||||||
import express from 'express';
|
import express from 'express';
|
||||||
|
import cors from 'cors';
|
||||||
import pathRoutes from './routes/parkRoutes.js';
|
import pathRoutes from './routes/parkRoutes.js';
|
||||||
import coasterRoutes from './routes/coasterRoutes.js';
|
import coasterRoutes from './routes/coasterRoutes.js';
|
||||||
|
|
||||||
@@ -8,6 +9,8 @@ const port = 3000;
|
|||||||
// Middleware für JSON-Anfragen
|
// Middleware für JSON-Anfragen
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
|
||||||
|
app.use(cors());
|
||||||
|
|
||||||
// Routen hinzufügen
|
// Routen hinzufügen
|
||||||
app.use('/api/parks', pathRoutes);
|
app.use('/api/parks', pathRoutes);
|
||||||
app.use('/api/coasters', coasterRoutes);
|
app.use('/api/coasters', coasterRoutes);
|
||||||
|
|||||||
14
package-lock.json
generated
14
package-lock.json
generated
@@ -8,6 +8,7 @@
|
|||||||
"name": "coasterdb",
|
"name": "coasterdb",
|
||||||
"version": "0.0.0",
|
"version": "0.0.0",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"cors": "^2.8.5",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
@@ -2179,6 +2180,18 @@
|
|||||||
"node": ">=6.6.0"
|
"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": {
|
"node_modules/cosmiconfig": {
|
||||||
"version": "7.1.0",
|
"version": "7.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz",
|
||||||
@@ -4076,7 +4089,6 @@
|
|||||||
"version": "4.1.1",
|
"version": "4.1.1",
|
||||||
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
|
||||||
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
|
||||||
"dev": true,
|
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=0.10.0"
|
"node": ">=0.10.0"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
"api-backend": "cross-env TS_NODE_PROJECT=./api-backend/tsconfig.json node --loader ts-node/esm api-backend/src/index.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"cors": "^2.8.5",
|
||||||
"express": "^5.1.0",
|
"express": "^5.1.0",
|
||||||
"sqlite3": "^5.1.7",
|
"sqlite3": "^5.1.7",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
|
|||||||
@@ -9,12 +9,30 @@ export default {
|
|||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
coasters: [
|
coasters: [] as { id: number; name: string; location: string; average_visitor_count: number; ticket_price: string, park_id: number, park_name?: string }[]
|
||||||
{ name: 'Blue Fire', park: 'Europa Park' },
|
}
|
||||||
{ name: 'Taron', park: 'Phantasialand' },
|
},
|
||||||
{ name: 'Silver Star', park: 'Europa Park' },
|
async mounted() {
|
||||||
{ name: 'Karacho', park: 'Erlebnispark Tripsdrill' }
|
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 {
|
|||||||
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-2 gap-6">
|
<div class="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-2 gap-6">
|
||||||
<a
|
<a
|
||||||
v-for="coaster in coasters"
|
v-for="coaster in coasters"
|
||||||
:key="coaster.name"
|
:key="coaster.id"
|
||||||
:href="`/app/coaster/${coaster.name.replace(' ', '_')}`"
|
:href="`/app/coaster/${coaster.id}`"
|
||||||
class="bg-white dark:bg-gray-800 shadow-md sm:rounded-lg p-6 hover:shadow-lg transition-shadow"
|
class="bg-white dark:bg-gray-800 shadow-md sm:rounded-lg p-6 hover:shadow-lg transition-shadow"
|
||||||
>
|
>
|
||||||
<h2 class="text-xl font-bold text-gray-900 dark:text-white mb-2">
|
<h2 class="text-xl font-bold text-gray-900 dark:text-white mb-2">
|
||||||
{{ coaster.name }}
|
{{ coaster.name }}
|
||||||
</h2>
|
</h2>
|
||||||
<p class="text-gray-700 dark:text-gray-300">
|
<p class="text-gray-700 dark:text-gray-300">
|
||||||
<span class="font-semibold">Park:</span> {{ coaster.park }}
|
<span class="font-semibold">Park:</span> {{ coaster.park_name || 'Unbekannt' }}
|
||||||
</p>
|
</p>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
</div>
|
</div>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
Reference in New Issue
Block a user