Tried adding API-backend
This commit is contained in:
20
api-backend/src/index.ts
Normal file
20
api-backend/src/index.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import * as express from 'express';
|
||||||
|
import pathRoutes from './routes/parkRoutes';
|
||||||
|
import coasterRoutes from './routes/coasterRoutes';
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const port = 3000;
|
||||||
|
|
||||||
|
// Middleware für JSON-Anfragen
|
||||||
|
app.use(express.json());
|
||||||
|
|
||||||
|
// Routen hinzufügen
|
||||||
|
app.use('/api/parks', pathRoutes);
|
||||||
|
app.use('/api/coasters', coasterRoutes);
|
||||||
|
|
||||||
|
// Start des Servers
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Server läuft auf http://localhost:${port}`);
|
||||||
|
});
|
||||||
|
|
||||||
|
export default app;
|
||||||
21
api-backend/src/models/coaster.ts
Normal file
21
api-backend/src/models/coaster.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import sqlite3 from 'sqlite3';
|
||||||
|
|
||||||
|
const db = new sqlite3.Database('./coasterdb.sqlite3');
|
||||||
|
|
||||||
|
export const getCoasters = (): Promise<any[]> => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.all("SELECT * FROM coasters", (err, rows) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve(rows);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getCoasterById = (id: number): Promise<any> => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.get("SELECT * FROM coasters WHERE id = ?", [id], (err, row) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve(row);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
21
api-backend/src/models/park.ts
Normal file
21
api-backend/src/models/park.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import sqlite3 from 'sqlite3';
|
||||||
|
|
||||||
|
const db = new sqlite3.Database('./coasterdb.sqlite3');
|
||||||
|
|
||||||
|
export const getParks = (): Promise<any[]> => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.all("SELECT * FROM parks", (err, rows) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve(rows);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const getParkById = (id: number): Promise<any> => {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
db.get("SELECT * FROM parks WHERE id = ?", [id], (err, row) => {
|
||||||
|
if (err) reject(err);
|
||||||
|
else resolve(row);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
31
api-backend/src/routes/coasterRoutes.ts
Normal file
31
api-backend/src/routes/coasterRoutes.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { getCoasters, getCoasterById } from '../models/coaster';
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
// Alle Achterbahnen anzeigen
|
||||||
|
router.get('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const coasters = await getCoasters();
|
||||||
|
res.json(coasters);
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Achterbahn nach ID anzeigen
|
||||||
|
router.get('/:id', async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
try {
|
||||||
|
const coaster = await getCoasterById(Number(id));
|
||||||
|
if (coaster) {
|
||||||
|
res.json(coaster);
|
||||||
|
} else {
|
||||||
|
res.status(404).json({ message: 'Achterbahn nicht gefunden' });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
31
api-backend/src/routes/parkRoutes.ts
Normal file
31
api-backend/src/routes/parkRoutes.ts
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
import { Router } from 'express';
|
||||||
|
import { getParks, getParkById } from '../models/park';
|
||||||
|
|
||||||
|
const router = Router();
|
||||||
|
|
||||||
|
// Alle Parks anzeigen
|
||||||
|
router.get('/', async (req, res) => {
|
||||||
|
try {
|
||||||
|
const parks = await getParks();
|
||||||
|
res.json(parks);
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// Park nach ID anzeigen
|
||||||
|
router.get('/:id', async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
try {
|
||||||
|
const park = await getParkById(Number(id));
|
||||||
|
if (park) {
|
||||||
|
res.json(park);
|
||||||
|
} else {
|
||||||
|
res.status(404).json({ message: 'Park nicht gefunden' });
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
res.status(500).json({ error: err.message });
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
export default router;
|
||||||
2204
package-lock.json
generated
2204
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -6,9 +6,12 @@
|
|||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite",
|
"dev": "vite",
|
||||||
"build": "vue-tsc -b && vite build",
|
"build": "vue-tsc -b && vite build",
|
||||||
"preview": "vite preview"
|
"preview": "vite preview",
|
||||||
|
"api-backend": "node --loader ts-node/esm api-backend/src/index.ts"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"express": "^5.1.0",
|
||||||
|
"sqlite3": "^5.1.7",
|
||||||
"vue": "^3.5.13"
|
"vue": "^3.5.13"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
@@ -16,13 +19,15 @@
|
|||||||
"@tailwindcss/postcss7-compat": "^2.2.17",
|
"@tailwindcss/postcss7-compat": "^2.2.17",
|
||||||
"@tsconfig/node18": "^18.2.4",
|
"@tsconfig/node18": "^18.2.4",
|
||||||
"@types/cors": "^2.8.17",
|
"@types/cors": "^2.8.17",
|
||||||
"@types/node": "^22.12.0",
|
"@types/express": "^5.0.1",
|
||||||
|
"@types/node": "^22.15.14",
|
||||||
"@vitejs/plugin-vue": "^5.2.1",
|
"@vitejs/plugin-vue": "^5.2.1",
|
||||||
"@vue/tsconfig": "^0.7.0",
|
"@vue/tsconfig": "^0.7.0",
|
||||||
"autoprefixer": "^10.4.20",
|
"autoprefixer": "^10.4.20",
|
||||||
"axios": "^1.7.9",
|
"axios": "^1.7.9",
|
||||||
"postcss": "^8.5.1",
|
"postcss": "^8.5.1",
|
||||||
"tailwindcss": "^4.0.0",
|
"tailwindcss": "^4.0.0",
|
||||||
|
"ts-node": "^10.9.2",
|
||||||
"typescript": "~5.6.2",
|
"typescript": "~5.6.2",
|
||||||
"vite": "^6.0.5",
|
"vite": "^6.0.5",
|
||||||
"vue-router": "^4.5.0",
|
"vue-router": "^4.5.0",
|
||||||
|
|||||||
Reference in New Issue
Block a user