diff --git a/api-backend/src/index.ts b/api-backend/src/index.ts index f66fd84..5f40ef6 100644 --- a/api-backend/src/index.ts +++ b/api-backend/src/index.ts @@ -1,6 +1,6 @@ -import * as express from 'express'; -import pathRoutes from './routes/parkRoutes'; -import coasterRoutes from './routes/coasterRoutes'; +import express from 'express'; +import pathRoutes from './routes/parkRoutes.js'; +import coasterRoutes from './routes/coasterRoutes.js'; const app = express(); const port = 3000; diff --git a/api-backend/src/models/coaster.ts b/api-backend/src/models/coaster.ts index f955671..1a87dbb 100644 --- a/api-backend/src/models/coaster.ts +++ b/api-backend/src/models/coaster.ts @@ -1,6 +1,6 @@ import sqlite3 from 'sqlite3'; -const db = new sqlite3.Database('./coasterdb.sqlite3'); +const db = new sqlite3.Database('./database.db'); export const getCoasters = (): Promise => { return new Promise((resolve, reject) => { diff --git a/api-backend/src/models/park.ts b/api-backend/src/models/park.ts index 35faa34..43f91a8 100644 --- a/api-backend/src/models/park.ts +++ b/api-backend/src/models/park.ts @@ -1,6 +1,6 @@ import sqlite3 from 'sqlite3'; -const db = new sqlite3.Database('./coasterdb.sqlite3'); +const db = new sqlite3.Database('./database.db'); export const getParks = (): Promise => { return new Promise((resolve, reject) => { diff --git a/api-backend/src/routes/coasterRoutes.ts b/api-backend/src/routes/coasterRoutes.ts index 10cfea8..b6d4ed0 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'; +import { getCoasters, getCoasterById } from '../models/coaster.js'; const router = Router(); @@ -9,7 +9,8 @@ router.get('/', async (req, res) => { const coasters = await getCoasters(); res.json(coasters); } catch (err) { - res.status(500).json({ error: err.message }); + console.error('Fehler beim Abrufen der Achterbahnen:', err); + res.status(500).json({ message: 'Fehler beim Abrufen der Achterbahnen' }); } }); @@ -24,7 +25,7 @@ router.get('/:id', async (req, res) => { res.status(404).json({ message: 'Achterbahn nicht gefunden' }); } } catch (err) { - res.status(500).json({ error: err.message }); + } }); diff --git a/api-backend/src/routes/parkRoutes.ts b/api-backend/src/routes/parkRoutes.ts index af8e963..cb768ac 100644 --- a/api-backend/src/routes/parkRoutes.ts +++ b/api-backend/src/routes/parkRoutes.ts @@ -1,5 +1,5 @@ import { Router } from 'express'; -import { getParks, getParkById } from '../models/park'; +import { getParks, getParkById } from '../models/park.js'; const router = Router(); @@ -9,7 +9,8 @@ router.get('/', async (req, res) => { const parks = await getParks(); res.json(parks); } catch (err) { - res.status(500).json({ error: err.message }); + console.error('Fehler beim Abrufen der Parks:', err); + res.status(500).json({ message: 'Fehler beim Abrufen der Parks' }); } }); @@ -24,7 +25,8 @@ router.get('/:id', async (req, res) => { res.status(404).json({ message: 'Park nicht gefunden' }); } } catch (err) { - res.status(500).json({ error: err.message }); + console.error('Fehler beim Abrufen des Parks:', err); + res.status(500).json({ message: 'Fehler beim Abrufen des Parks' }); } }); diff --git a/api-backend/tsconfig.json b/api-backend/tsconfig.json new file mode 100644 index 0000000..2aa9a23 --- /dev/null +++ b/api-backend/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "compilerOptions": { + "module": "ESNext", + "target": "ES2020", + "moduleResolution": "node", + "esModuleInterop": true, + "skipLibCheck": true, + "strict": true, + "resolveJsonModule": true, + "forceConsistentCasingInFileNames": true + }, + "include": ["src"] + } + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 46e9de6..e14abb7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "@vue/tsconfig": "^0.7.0", "autoprefixer": "^10.4.20", "axios": "^1.7.9", + "cross-env": "^7.0.3", "postcss": "^8.5.1", "tailwindcss": "^4.0.0", "ts-node": "^10.9.2", @@ -2209,6 +2210,38 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/css-color-names": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", @@ -3310,7 +3343,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "optional": true + "devOptional": true }, "node_modules/jiti": { "version": "2.4.2", @@ -4155,6 +4188,15 @@ "node": ">=0.10.0" } }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", @@ -4917,6 +4959,27 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/side-channel": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", @@ -5669,7 +5732,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "optional": true, + "devOptional": true, "dependencies": { "isexe": "^2.0.0" }, diff --git a/package.json b/package.json index b1614b9..fdde8cf 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "dev": "vite", "build": "vue-tsc -b && vite build", "preview": "vite preview", - "api-backend": "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": { "express": "^5.1.0", @@ -25,6 +25,7 @@ "@vue/tsconfig": "^0.7.0", "autoprefixer": "^10.4.20", "axios": "^1.7.9", + "cross-env": "^7.0.3", "postcss": "^8.5.1", "tailwindcss": "^4.0.0", "ts-node": "^10.9.2",