Mitgliederfunktionen: Abrufen nach Abteilung, neu Anlegen

This commit is contained in:
Klaas Börgmann 2024-09-24 15:36:49 +02:00
parent 01f913ef2f
commit 54abc3956a
6 changed files with 168 additions and 7 deletions

View File

@ -0,0 +1,51 @@
**Server README**
================
**Übersicht**
------------
Dieser Server ist eine Webanwendung, die mit Node.js und Express.js erstellt wurde. Er bietet eine API für Benutzerregistrierung und -anmeldung sowie eine geschützte Route für autorisierte Benutzer.
**Anforderungen**
---------------
* Node.js (Version 14 oder höher)
* Express.js (Version 4 oder höher)
* PostgreSQL-Datenbank (mit pg-Modul)
**Konfiguration**
----------------
* Die Datenbankverbindung wird über Umgebungsvariablen konfiguriert (siehe `.env`-Datei).
* Der Server läuft standardmäßig auf Port 3000.
**API-Endpunkte**
-----------------
* `/auth/register`: Registrierung eines neuen Benutzers
* `/auth/login`: Anmeldung eines bestehenden Benutzers
* `/mitglieder`: Geschützte Route für autorisierte Benutzer
**Middleware**
-------------
* `authenticateToken`: Überprüft den JWT-Token in der Authorization-Header
**Datenbank**
------------
* Die Datenbank wird mit dem pg-Modul verbunden.
* Die Tabellen werden automatisch erstellt, wenn der Server gestartet wird.
**Starten des Servers**
----------------------
* `npm start` oder `node server/app.js`
**Hinweis**
---------
* Bitte stellen Sie sicher, dass Sie die `.env`-Datei mit Ihren eigenen Datenbankzugangsdaten konfiguriert haben.
* Bitte beachten Sie, dass dies ein Beispielprojekt ist und Sie es an Ihre eigenen Bedürfnisse anpassen sollten.

View File

@ -2,6 +2,7 @@ require("dotenv").config();
const express = require("express"); const express = require("express");
const app = express(); const app = express();
const authRoutes = require("./routes/auth"); const authRoutes = require("./routes/auth");
const memberRoutes = require("./routes/members");
const bodyParser = require("body-parser"); const bodyParser = require("body-parser");
// Middleware // Middleware
@ -10,13 +11,9 @@ app.use(express.urlencoded({ extended: true }));
const authenticateToken = require("./middleware/authenticateToken"); const authenticateToken = require("./middleware/authenticateToken");
// Beispiel für eine geschützte Route
app.get("/mitglieder", authenticateToken, (req, res) => {
res.json({ message: "Dies ist eine geschützte Route", user: req.user });
});
// Routes // Routes
app.use("/auth", authRoutes); app.use("/auth", authRoutes);
app.use("/members", memberRoutes);
// Server starten // Server starten
const PORT = process.env.PORT || 3000; const PORT = process.env.PORT || 3000;

View File

@ -0,0 +1,73 @@
const bcrypt = require("bcryptjs");
const jwt = require("jsonwebtoken");
const { Pool } = require("pg");
// Datenbankverbindung
const pool = new Pool({
user: process.env.DB_USER,
host: process.env.DB_HOST,
database: process.env.DB_NAME,
password: process.env.DB_PASSWORD,
port: 5432,
});
const allMembers = async (req, res) => {
const { id } = req.body; // Abteilungs-ID aus dem Request-Body
try {
// Überprüfen, ob eine ID übergeben wurde
if (!id) {
return res.status(400).json({ message: "Abteilungs-ID fehlt" });
}
// Abfrage der Mitglieder basierend auf der Abteilungs-ID
const allMembers = await pool.query(
`
SELECT m.*
FROM mitglieder m
JOIN Abteilungszuordnung az ON m.ID = az.FID_Mitglied
WHERE az.FID_Abteilung = $1
`,
[id]
);
// Wenn keine Mitglieder gefunden wurden
if (allMembers.rows.length === 0) {
return res
.status(404)
.json({ message: "Keine Mitglieder in dieser Abteilung gefunden" });
}
// Erfolgreiche Antwort mit den Mitgliedern
res.status(200).json({ members: allMembers.rows });
} catch (err) {
res.status(500).json({
message: "Fehler beim Abrufen der Mitglieder",
error: err.message,
});
}
};
const newMember = async (req, res) => {
const { vorname, nachname, geburtsdatum, abteilung, adresse, probe } =
req.body;
try {
const newMember = await pool.query(
"INSERT INTO mitglieder (vorname, nachname, geburtsdatum, adresse, probe) VALUES ($1, $2, $3, $4, $5) RETURNING id",
[vorname, nachname, geburtsdatum, adresse, probe]
);
const intoAbt = await pool.query(
"INSERT INTO Abteilungszuordnung (FID_Mitglied, FID_Abteilung) VALUES ($1, $2)",
[newMember.rows[0].id, abteilung]
);
res
.status(201)
.json({ message: "Mitglied erstellt", member: newMember.rows[0] });
} catch (err) {
res.status(500).json({
message: "Fehler beim Erstellen des Mitglieds",
error: err.message,
});
}
};
module.exports = { allMembers, newMember };

View File

@ -77,4 +77,27 @@ const loginUser = async (req, res) => {
} }
}; };
module.exports = { registerUser, loginUser }; const updateUser = async (req, res) => {
const { id, username, password, email, role } = req.body;
try {
const updateUser = await pool.query(
"UPDATE users SET username = $1, password = $2, email = $3, role = $4 WHERE id = $5 RETURNING *",
[username, password, email, role, id]
);
res
.status(200)
.json({
message: "Benutzerdaten aktualisiert",
user: updateUser.rows[0],
});
} catch (err) {
res
.status(500)
.json({
message: "Fehler beim Aktualisieren der Benutzerdaten",
error: err.message,
});
}
};
module.exports = { registerUser, loginUser, updateUser };

View File

@ -1,6 +1,11 @@
const express = require("express"); const express = require("express");
const { loginUser, registerUser } = require("../controllers/userController"); const {
loginUser,
registerUser,
updateUser,
} = require("../controllers/userController");
const router = express.Router(); const router = express.Router();
const authenticateToken = require("../middleware/authenticateToken");
// Registrierungsroute // Registrierungsroute
router.post("/register", registerUser); router.post("/register", registerUser);
@ -8,4 +13,6 @@ router.post("/register", registerUser);
// Loginroute // Loginroute
router.post("/login", loginUser); router.post("/login", loginUser);
router.post("/update", authenticateToken, updateUser);
module.exports = router; module.exports = router;

10
server/routes/members.js Normal file
View File

@ -0,0 +1,10 @@
const express = require("express");
const { allMembers, newMember } = require("../controllers/memberController");
const router = express.Router();
const authenticateToken = require("../middleware/authenticateToken");
// Loginroute
router.post("/all", authenticateToken, allMembers);
router.post("/new", authenticateToken, newMember);
module.exports = router;