Erste ansprechende Version
This commit is contained in:
5
seniorendienst-backend/.dockerignore
Normal file
5
seniorendienst-backend/.dockerignore
Normal file
@@ -0,0 +1,5 @@
|
||||
node_modules
|
||||
npm-debug.log
|
||||
.env
|
||||
.git
|
||||
.gitignore
|
||||
3
seniorendienst-backend/.env.docker
Normal file
3
seniorendienst-backend/.env.docker
Normal file
@@ -0,0 +1,3 @@
|
||||
# Environment variables for Docker Compose
|
||||
MONGO_ROOT_USER=root
|
||||
MONGO_ROOT_PASSWD=SFluorit
|
||||
24
seniorendienst-backend/package.json
Normal file
24
seniorendienst-backend/package.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"name": "seniorendienst-backend",
|
||||
"type": "module",
|
||||
"version": "1.0.0",
|
||||
"vdate": "2025-11-24 13:00 UTC",
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "node src/server.js",
|
||||
"dev": "nodemon src/server.js"
|
||||
},
|
||||
"keywords": [],
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"dependencies": {
|
||||
"cors": "^2.8.5",
|
||||
"dotenv": "^17.2.3",
|
||||
"express": "^5.1.0",
|
||||
"mongodb": "^7.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"nodemon": "^3.1.11"
|
||||
}
|
||||
}
|
||||
40
seniorendienst-backend/src/db/db.js
Normal file
40
seniorendienst-backend/src/db/db.js
Normal file
@@ -0,0 +1,40 @@
|
||||
// src/db/db.js
|
||||
import 'dotenv/config'; // Importiert und lädt Umgebungsvariablen
|
||||
import { MongoClient } from 'mongodb';
|
||||
|
||||
// MongoDB Verbindungs-URI aus der .env-Datei
|
||||
const uri = process.env.MONGO_URI;
|
||||
|
||||
let db;
|
||||
|
||||
/**
|
||||
* Stellt die Verbindung zur MongoDB her.
|
||||
* @returns {db} Die verbundene Datenbankinstanz.
|
||||
*/
|
||||
export async function connectToDb() {
|
||||
try {
|
||||
const client = new MongoClient(uri, {
|
||||
});
|
||||
|
||||
await client.connect();
|
||||
|
||||
// Die Datenbankinstanz speichern
|
||||
db = client.db();
|
||||
|
||||
console.log(`✅ Erfolgreich mit MongoDB verbunden.`);
|
||||
|
||||
return db;
|
||||
|
||||
} catch (error) {
|
||||
console.error("❌ Fehler bei der Verbindung zur MongoDB:", error);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Gibt die gespeicherte Datenbankinstanz zurück.
|
||||
* @returns {db} Die Datenbankinstanz.
|
||||
*/
|
||||
export function getDb() {
|
||||
return db;
|
||||
}
|
||||
124
seniorendienst-backend/src/server.js
Normal file
124
seniorendienst-backend/src/server.js
Normal file
@@ -0,0 +1,124 @@
|
||||
// seniorendienst-backend/src/server.js
|
||||
import 'dotenv/config';
|
||||
import express from 'express';
|
||||
import cors from 'cors';
|
||||
import { connectToDb, getDb } from './db/db.js';
|
||||
import { ObjectId } from 'mongodb';
|
||||
|
||||
const app = express();
|
||||
const PORT = process.env.PORT || 3002;
|
||||
|
||||
// NEU: Nur Service-API
|
||||
const SERVICE_API = '/api/services';
|
||||
const COLLECTION_NAME = 'serviceentries';
|
||||
|
||||
// --- Middleware ---
|
||||
app.use(cors({
|
||||
// Stellen Sie sicher, dass dies 5173 oder den Port Ihres neuen Frontends ist!
|
||||
origin: 'http://localhost:5173',
|
||||
methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
|
||||
credentials: true,
|
||||
}));
|
||||
app.use(express.json());
|
||||
|
||||
// -----------------------------------------------------
|
||||
// API ROUTEN FÜR SENIORENDIENST
|
||||
// -----------------------------------------------------
|
||||
|
||||
// 1. READ: Alle Einträge abrufen
|
||||
app.get(SERVICE_API, async (req, res) => {
|
||||
try {
|
||||
const db = getDb();
|
||||
const entries = await db.collection(COLLECTION_NAME)
|
||||
.find({})
|
||||
.sort({ appointmentDate: 1 })
|
||||
.toArray();
|
||||
res.json(entries);
|
||||
} catch (error) {
|
||||
console.error("Fehler beim Abrufen der Service-Einträge:", error);
|
||||
res.status(500).json({ message: "Interner Serverfehler." });
|
||||
}
|
||||
});
|
||||
|
||||
// 2. CREATE: Neuen Eintrag erstellen
|
||||
app.post(SERVICE_API, async (req, res) => {
|
||||
try {
|
||||
const db = getDb();
|
||||
const entryData = req.body;
|
||||
|
||||
if (!entryData.name || !entryData.appointmentDate) {
|
||||
return res.status(400).json({ message: "Name und Termin sind erforderlich." });
|
||||
}
|
||||
|
||||
const result = await db.collection(COLLECTION_NAME).insertOne(entryData);
|
||||
const newEntry = { _id: result.insertedId, ...entryData };
|
||||
|
||||
res.status(201).json(newEntry);
|
||||
|
||||
} catch (error) {
|
||||
console.error("Fehler beim Erstellen des Service-Eintrags:", error);
|
||||
res.status(500).json({ message: "Interner Serverfehler." });
|
||||
}
|
||||
});
|
||||
|
||||
// 3. UPDATE: Eintrag aktualisieren
|
||||
app.put(`${SERVICE_API}/:id`, async (req, res) => {
|
||||
try {
|
||||
const db = getDb();
|
||||
const { id } = req.params;
|
||||
const updatedFields = req.body;
|
||||
|
||||
const filter = { _id: new ObjectId(id) };
|
||||
delete updatedFields._id;
|
||||
|
||||
const result = await db.collection(COLLECTION_NAME).updateOne(
|
||||
filter,
|
||||
{ $set: updatedFields }
|
||||
);
|
||||
|
||||
if (result.matchedCount === 0) {
|
||||
return res.status(404).json({ message: "Eintrag nicht gefunden." });
|
||||
}
|
||||
|
||||
const updatedEntry = await db.collection(COLLECTION_NAME).findOne(filter);
|
||||
res.json(updatedEntry);
|
||||
|
||||
} catch (error) {
|
||||
console.error(`Fehler beim Aktualisieren des Eintrags ${req.params.id}:`, error);
|
||||
res.status(400).json({ message: "Ungültige ID oder Serverfehler." });
|
||||
}
|
||||
});
|
||||
|
||||
// 4. DELETE: Eintrag löschen
|
||||
app.delete(`${SERVICE_API}/:id`, async (req, res) => {
|
||||
try {
|
||||
const db = getDb();
|
||||
const { id } = req.params;
|
||||
|
||||
const filter = { _id: new ObjectId(id) };
|
||||
const result = await db.collection(COLLECTION_NAME).deleteOne(filter);
|
||||
|
||||
if (result.deletedCount === 0) {
|
||||
return res.status(404).json({ message: "Eintrag nicht gefunden." });
|
||||
}
|
||||
|
||||
res.status(204).send();
|
||||
|
||||
} catch (error) {
|
||||
console.error(`Fehler beim Löschen des Eintrags ${req.params.id}:`, error);
|
||||
res.status(400).json({ message: "Ungültige ID oder Serverfehler." });
|
||||
}
|
||||
});
|
||||
|
||||
// --- Server Start Logik (Bleibt unverändert) ---
|
||||
async function startServer() {
|
||||
try {
|
||||
await connectToDb();
|
||||
app.listen(PORT, () => {
|
||||
console.log(`🚀 Service Server läuft auf Port ${PORT}`);
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("Fehler beim Starten des Servers:", error);
|
||||
}
|
||||
}
|
||||
startServer();
|
||||
Reference in New Issue
Block a user