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 app = express();
|
||||
const authRoutes = require("./routes/auth");
|
||||
const memberRoutes = require("./routes/members");
|
||||
const bodyParser = require("body-parser");
|
||||
|
||||
// Middleware
|
||||
|
@ -10,13 +11,9 @@ app.use(express.urlencoded({ extended: true }));
|
|||
|
||||
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
|
||||
app.use("/auth", authRoutes);
|
||||
app.use("/members", memberRoutes);
|
||||
|
||||
// Server starten
|
||||
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 { loginUser, registerUser } = require("../controllers/userController");
|
||||
const {
|
||||
loginUser,
|
||||
registerUser,
|
||||
updateUser,
|
||||
} = require("../controllers/userController");
|
||||
const router = express.Router();
|
||||
const authenticateToken = require("../middleware/authenticateToken");
|
||||
|
||||
// Registrierungsroute
|
||||
router.post("/register", registerUser);
|
||||
|
@ -8,4 +13,6 @@ router.post("/register", registerUser);
|
|||
// Loginroute
|
||||
router.post("/login", loginUser);
|
||||
|
||||
router.post("/update", authenticateToken, updateUser);
|
||||
|
||||
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