Mitgliederfunktionen: Abrufen nach Abteilung, neu Anlegen
This commit is contained in:
parent
01f913ef2f
commit
54abc3956a
51
README.md
51
README.md
|
@ -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.
|
|
@ -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;
|
||||||
|
|
|
@ -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 };
|
|
@ -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 };
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
Loading…
Reference in New Issue