Skip to content
Snippets Groups Projects
Commit 96ac0372 authored by Lilith Faust's avatar Lilith Faust
Browse files

Merge remote-tracking branch 'origin/master'

parents bf463131 6a844d1c
Branches
No related merge requests found
......@@ -77,7 +77,7 @@
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<input type="hidden" id="edit-user-id">
<input type="hidden" id="edit-user-id-">
<label for="edit-user-first-namee">Vorname</label>
<input type="text" class="form-control mb-3" id="edit-user-first-namee">
<label for="edit-user-last-namee">Name</label>
......@@ -309,7 +309,9 @@
<li><a>Merkliste</a></li>
<li><a>Meine Supportanfragen</a></li>
<li><a>Reisebericht schreiben</a></li>
<li><a>Abmelden</a></li>
<div id="logout-form1">
<li><a id="logout-button1" onclick="showPage('startseite')">Abmelden</a></li>
</div>
</ul>
</nav>
</aside>
......@@ -352,8 +354,31 @@
</div>
</div>
<!-- Button trigger modal -->
<button type="button" class="btn btn-primary" id="changes-button" data-bs-toggle="modal" data-bs-target="#exampleModal">
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
Profil löschen
</button>
<!-- Delete-Popup-Modal -->
<div class="modal fade" id="deleteModal" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="deleteModalLabel">Profil löschen</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Bist du dir sicher, dass du dein Profil löschen möchtest? Diese Aktion kann nicht rückgängig gemacht werden.
</div>
<div class="modal-footer">
<button type="submit" id="saveButtonDelete" class="btn btn-danger">Löschen</button>
</div>
</div>
</div>
</div>
<!-- Edit Button trigger modal -->
<button type="button" class="btn btn-primary" data-bs-toggle="modal" data-bs-target="#exampleModal">
Änderungen bestätigen
</button>
......@@ -473,7 +498,7 @@
</div>
<!--Admin-Nutzerliste muss noch an die richtige STelle gerückt werden-->
<div id="kontakt" class="page">
<div id="nutzerliste" class="page">
<div class="sidebarAdmin-container">
<aside class="sidebarAdmin">
<i class="fa-solid fa-circle-arrow-left backButton"></i>
......@@ -481,84 +506,113 @@
<ul>
<li><a>Dashboard</a></li>
<li><a>Kundendaten</a></li>
<li><a>Abmelden</a></li>
<div id="logout-form2">
<li><a id="logout-button2" onclick="showPage('startseite')">Abmelden</a></li>
</div>
</ul>
</nav>
</aside>
</div>
<div class="nutzerliste-container">
<h1>Kundendaten</h1>
<div class="table-container-nutzerliste">
<table>
<thead>
<tr>
<th>ID</th>
<th>Vorname</th>
<th>Name</th>
<th>Adresse</th>
<th>E-mail</th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>Anna</td>
<td>Peters</td>
<td>Hauptstraße 12, 61276 Weilrod</td>
<td>anna.peters@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>2</td>
<td>Bob</td>
<td>Hase</td>
<td>Hauptstraße 10, 61276 Weilrod</td>
<td>bob.hase@outlook.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>3</td>
<td>Claus</td>
<td>Krause</td>
<td>Hauptstraße 5, 61276 Weilrod</td>
<td>claus.krause@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>4</td>
<td>Eva</td>
<td>Groß</td>
<td>Hauptstraße 20, 61276 Weilrod</td>
<td>eva.groß@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>5</td>
<td>Gustaf</td>
<td>Arndt</td>
<td>Hauptstraße 35, 61276 Weilrod</td>
<td>gustaf.arndt@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>6</td>
<td>Hans</td>
<td>Steffens</td>
<td>Klausstraße 12, 61276 Weilrod</td>
<td>hans.steffens@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
<tr>
<td>7</td>
<td>Ingo</td>
<td>Keiner</td>
<td>lehmstraße 12, 61276 Weilrod</td>
<td>ingo.keiner@gmail.com</td>
<td><i class="fa-solid fa-pen updateButton"></i> <i class="fa-solid fa-trash-can deleteButton"></i></td>
</tr>
</tbody>
</table>
<div class="container d-none" id="user-list-container">
<table class="table table-striped table-hover">
<thead>
<tr>
<th>
ID
</th>
<th>
Vorname
</th>
<th>
Name
</th>
<th>
E-Mail
</th>
<th>
Adresse
</th>
<th>
Rolle
</th>
</tr>
</thead>
<tbody id="user-list">
</tbody>
</table>
<!-- Modal User von Admin aus bearbeiten -->
<div class="modal fade" id="updateAdminModal" tabindex="-1" aria-labelledby="updateModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="updateModalLabel">Daten von Nutzer bearbeiten</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-card">
<div class="modal-body-update">
<form id="edit-user-admin-form">
<input type="hidden" id="edit-user-id">
<div id="label1edituser" class="form-text-profile">
Vorname
<label for="edit-user-first-name" class="d-none">Vorname</label>
<input type="text" class="form-control-bearbeiten" id="edit-user-admin-first-name">
</div>
<div id="label2edituser" class="form-text-profile">
Nachname
<label for="edit-user-last-name" class="d-none">Name</label>
<input type="text" class="form-control-bearbeiten" id="edit-user-admin-last-name">
</div>
<div id="label3edituser" class="form-text-profile">
E-Mail
<label for="edit-user-email" class="d-none">E-Mail</label>
<input type="text" class="form-control-bearbeiten" id="edit-user-admin-email">
</div>
<div id="label4edituser" class="form-text-profile" >
Adresse
<label for="edit-user-admin-adress" class="d-none">Adresse</label>
<input type="text" class="form-control-bearbeiten" id="edit-user-admin-adress">
</div>
<div id="label5edituser" class="form-text-profile" >
Rolle
<label for="edit-user-admin-role" class="d-none">Rolle</label>
<input type="text" class="form-control-bearbeiten" id="edit-user-admin-role">
</div>
</form>
</div>
</div>
<div class="modal-footer">
<button type="submit" id="updateButtonEdit" class="btn btn-primary">Aktualisieren</button>
</div>
</div>
</div>
</div>
<!-- Modal User löschen -->
<div class="modal fade" id="deleteModalAdmin" tabindex="-1" aria-labelledby="deleteModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h1 class="modal-title fs-5" id="deleteModalAdminLabel">Nutzerdaten löschen</h1>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
Sind Sie sicher, dass Sie den Nutzer löschen wollen?
</div>
<div class="modal-footer">
<button type="submit" id="nodeleteButtonEdit" class="btn btn-primary">abbrechen</button>
<button type="submit" id="deleteButtonEdit" class="btn btn-primary">löschen</button>
</div>
</div>
</div>
</div>
</div>
</div>
......
......@@ -25,10 +25,6 @@ function showPage(pageId: string): void {
// Event-Listener für die Initialisierung beim Laden der Seite eim Laden der Seite wird die Funktion showPage('startseite') aufgerufen,
// um die Standardseite (startseite) anzuzeigen.
document.addEventListener('DOMContentLoaded', () => {
showPage('startseite'); // Standardmäßig die Seite "Reisen" anzeigen
});
interface User {
user_id: number;
......@@ -41,9 +37,14 @@ interface User {
// Ein Modal-Objekt von Bootstrap wird hier deklariert, aber initialisiert erst später im DOMContentLoaded Event.
let modalEl: bootstrap.Modal
let modalTest: bootstrap.Modal
let modalAdminEdit: bootstrap.Modal
document.addEventListener("DOMContentLoaded", (): void => {
showPage('startseite'); // Standardmäßig die Seite "Reisen" anzeigen
modalEl = new bootstrap.Modal("#edit-user-modal");
modalTest = new bootstrap.Modal("#deleteModal");
modalAdminEdit = new bootstrap.Modal("#updateAdminModal");
//--- check, if user is already logged in (e.g. after refresh) -------------------------------------------------------
checkLogin();
......@@ -117,47 +118,86 @@ document.addEventListener("DOMContentLoaded", (): void => {
passwordEl.value = "";
repeatPasswordEl.value = "";
});
const modalDeleteButton = document.getElementById("saveButtonDelete") as HTMLButtonElement;
modalDeleteButton.addEventListener("click", async () => {
deleteUser()
})
//Bearbeiten des Users
document.getElementById("edit-profile-form")!.addEventListener("submit", async (event: SubmitEvent): Promise<void> => {
event.preventDefault();
const firstNameEl = document.getElementById("edit-user-first-name") as HTMLInputElement;
const lastNameEl = document.getElementById("edit-user-last-name") as HTMLInputElement;
const eMailEl = document.getElementById("edit-user-email") as HTMLInputElement;
const adressEl = document.getElementById("edit-user-adress") as HTMLInputElement;
const passwordEl = document.getElementById("modal-password") as HTMLInputElement;
const firstName = firstNameEl.value;
const lastName = lastNameEl.value;
const eMail = eMailEl.value;
const adress = adressEl.value;
const password = passwordEl.value;
//Daten an den Server senden - Put anfrage um daten zu aktualisieren
const res: Response = await fetch(`/user`, {
method: 'put',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify({firstName, lastName, eMail, adress, password}),
//Bearbeiten des Users als Uer
document.getElementById("edit-profile-form")!.addEventListener("submit", async (event: SubmitEvent): Promise<void> => {
event.preventDefault();
const firstNameEl = document.getElementById("edit-user-first-name") as HTMLInputElement;
const lastNameEl = document.getElementById("edit-user-last-name") as HTMLInputElement;
const eMailEl = document.getElementById("edit-user-email") as HTMLInputElement;
const adressEl = document.getElementById("edit-user-adress") as HTMLInputElement;
const passwordEl = document.getElementById("modal-password") as HTMLInputElement;
const firstName = firstNameEl.value;
const lastName = lastNameEl.value;
const eMail = eMailEl.value;
const adress = adressEl.value;
const password = passwordEl.value;
//Daten an den Server senden - Put anfrage um daten zu aktualisieren
const res: Response = await fetch(`/user`, {
method: 'put',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify({firstName, lastName, eMail, adress, password}),
});
//Antwort vom Server verarbeiten
try {
const data: any = await res.json();
if (res.ok) {
addMessage(data.message || "Profil wurde erfolgreich aktualisiert.");
userDataInProfile(data.user);
modalAdminEdit.hide;
showPage('profil')// Modal schließen
} else {
addMessage(data.message || "Fehler beim Aktualisieren des Profils.");
}
} catch (error) {
console.error("Fehler beim Senden der Anfrage:", error);
}
});
//ANtwort vom Server verarbeiten
try {
// edit admin
document.getElementById("edit-user-admin-form")!.addEventListener("submit", async (event: SubmitEvent): Promise<void> => {
event.preventDefault();
let idEl: HTMLInputElement = document.getElementById("edit-user-admin-id") as HTMLInputElement;
let firstNameEl: HTMLInputElement = document.getElementById("edit-user-admin-first-name") as HTMLInputElement;
let lastNameEl: HTMLInputElement = document.getElementById("edit-user-admin-last-name") as HTMLInputElement;
let emailEl: HTMLInputElement = document.getElementById("edit-user-admin-email") as HTMLInputElement;
let adressEl: HTMLInputElement = document.getElementById("edit-user-admin-adress") as HTMLInputElement;
let roleEl: HTMLInputElement = document.getElementById("edit-user-admin-role") as HTMLInputElement;
// Read the user's id from the hidden field.
let userId: number = parseInt(idEl.value);
let firstName: string = firstNameEl.value;
let lastName: string = lastNameEl.value;
let email: string = emailEl.value;
let adress: string = adressEl.value;
let role: string = roleEl.value;
const res: Response = await fetch('/user/' + userId, {
method: 'put',
headers: {
"Content-type": "application/json"
},
body: JSON.stringify({ firstName, lastName, email, adress, role}),
});
const data: any = await res.json();
addMessage(data.message);
if (res.ok) {
addMessage(data.message || "Profil wurde erfolgreich aktualisiert.");
userDataInProfile(data.user);
modalEl.hide(); // Modal schließen
} else {
addMessage(data.message || "Fehler beim Aktualisieren des Profils.");
}
} catch (error) {
console.error("Fehler beim Senden der Anfrage:", error);
addMessage("Ein unerwarteter Fehler ist aufgetreten. Bitte versuchen Sie es später erneut.");
}
});
// Hide the modal window
modalEl.hide();
// Update the html
readUsers();
});
//Login
document.getElementById("dropdown-anmelden")!.addEventListener("submit", async (event: SubmitEvent): Promise<void> => {
......@@ -193,6 +233,12 @@ document.getElementById("edit-profile-form")!.addEventListener("submit", async (
} else if (response.status === 200) {
const data: any = await response.json();
addMessage(data.message);
console.log(data.user.role);
if (data.user.role == 'admin') {
console.log("admin");
showPage('nutzerliste');
showLoggedInStatus(data.user);
}
showLoggedInStatus(data.user);
userDataInProfile(data.user);
} else {
......@@ -200,6 +246,7 @@ document.getElementById("edit-profile-form")!.addEventListener("submit", async (
}
});
//Logout durch POST-Anfrage an http://localhost:8080/logout, um den Benutzer abzumelden.
document.getElementById("logout-form")!.addEventListener("submit", async (event: SubmitEvent): Promise<void> => {
event.preventDefault();
......@@ -238,7 +285,6 @@ async function readUsers(): Promise<void> {
renderList(data.userList);
}
// Hallo "..."
/**
* Displays the logged in username
*/
......@@ -246,6 +292,10 @@ function showLoggedInStatus(user: User): void {
const firstName: HTMLElement = document.getElementById('current-user-firstName')!;
firstName.innerHTML = `Hallo, ${user.firstName}!`; //firstName.innerHTML: Die innerHTML-Eigenschaft eines HTML-Elements enthält den HTML-Inhalt
// des Elements. Hier wird der Inhalt des firstName-Elements (wahrscheinlich ein Textfeld oder ein div) auf den Text "Hallo, {user.firstName}!" gesetzt.
const contentArea: HTMLElement = document.getElementById('user-list-container')!;
contentArea.classList.remove("d-none"); // show content area
readUsers();
}
......@@ -259,11 +309,37 @@ function userDataInProfile (user: User): void {
lastNameEl.value = user.lastName;
eMailEl.value = user.eMail;
}
//Delete
async function deleteUser(): Promise<void> {
console.log("Enter delete function")
//Daten an den Server senden - delete anfrage, um daten zu aktualisieren
const res: Response = await fetch(`/user`, {
method: 'delete',
headers: {
"Content-type": "application/json"
},
});
//Antwort vom Server verarbeiten
try {
//modalEl.hide(); // Modal schließen
const data: any = await res.json();
if (res.ok) {
modalTest.hide();// Modal schließen
showPage('startseite')
addMessage(data.message || "Profil wurde erfolgreich gelöscht.");
} else {
addMessage(data.message || "Fehler beim Löschen des Profils.");
}
} catch (error) {
console.error("Fehler beim Senden der Löschen-Anfrage:", error);
}
}
/**
* Resets the site to the logged-out state.
* Clears user list, shows login form, hides logout form-
*/
/*function showLoggedOutStatus(): void {
function showLoggedOutStatus(): void {
const eMail: HTMLElement = document.getElementById('current-user-email')!;
eMail.innerHTML = ``;
......@@ -277,15 +353,15 @@ function userDataInProfile (user: User): void {
login.classList.remove("d-none"); // show login
(document.getElementById('add-user-form') as HTMLFormElement).reset();
}*/
}
*/
/// für ADMIN wieder relevant
/**
* 1) Clears the user table.
* 2) Adds all users to the table.
*/
//Benutzerliste
//**
function renderList(userList: User[]): void {
let userListEl: HTMLElement = document.getElementById("user-list")!;
......@@ -297,8 +373,8 @@ function renderList(userList: User[]): void {
let tr: HTMLTableRowElement = document.createElement("tr");
// ID cell
let tdUser_id: HTMLTableCellElement = document.createElement("td");
tdUser_id.textContent = user.user_id.toString();
let tdId: HTMLTableCellElement = document.createElement("td");
tdId.textContent = user.user_id.toString();
// Given name cell
let tdFirstName: HTMLTableCellElement = document.createElement("td");
......@@ -309,10 +385,10 @@ function renderList(userList: User[]): void {
tdLastName.textContent = user.lastName;
// email cell
let tdEmail: HTMLTableCellElement = document.createElement("td");
tdEmail.textContent = user.eMail;
let tdEMail: HTMLTableCellElement = document.createElement("td");
tdEMail.textContent = user.eMail;
// adress cell
// address cell
let tdAdress: HTMLTableCellElement = document.createElement("td");
tdAdress.textContent = user.adress;
......@@ -337,21 +413,56 @@ function renderList(userList: User[]): void {
// Delete button icon
let deleteButtonIcon: HTMLElement = document.createElement("i");
deleteButtonIcon.className = "fa-solid fa-trash";
deleteButtonIcon.className = "fa-solid fa-trash-can deleteButton";
deleteButton.append(deleteButtonIcon);
// Edit button
let editAdminButton: HTMLButtonElement = document.createElement("button");
editAdminButton.className = "updateButton";
editAdminButton.addEventListener("click", () => {
showEditModal(user);
});
// Edit button icon
let editButtonIcon: HTMLElement = document.createElement("i");
editButtonIcon.className = "fa-solid fa-pen updateButton";
editAdminButton.append(editButtonIcon);
// Adds the buttons to the button cell
tdButtons.append(deleteButton, editAdminButton);
// Add the cells to the table row
tr.append(tdUser_id, tdFirstName, tdLastName, tdEmail,tdAdress, tdRole, tdButtons);
tr.append(tdId, tdFirstName, tdLastName, tdEMail,tdAdress, tdRole, tdButtons);
// Add the table row to the table
userListEl.append(tr);
}
}
/**
* 1) Fills the modal window with the given user's data.
* 2) Opens the modal window.
*/
function showEditModal(user: User): void {
let idEl: HTMLInputElement = document.getElementById("edit-user-id") as HTMLInputElement;
let firstNameEl: HTMLInputElement = document.getElementById("edit-user-admin-first-name") as HTMLInputElement;
let lastNameEl: HTMLInputElement = document.getElementById("edit-user-admin-last-name") as HTMLInputElement;
let eMailEl: HTMLInputElement = document.getElementById("edit-user-admin-email") as HTMLInputElement;
let adressEl: HTMLInputElement = document.getElementById("edit-user-admin-adress") as HTMLInputElement;
let roleEl: HTMLInputElement = document.getElementById("edit-user--admin-role") as HTMLInputElement;
// Write the user's id into the hidden field.
idEl.value = user.user_id.toString();
// Write the user's data into the text fields.
firstNameEl.value = user.firstName;
lastNameEl.value = user.lastName;
eMailEl.value = user.eMail;
adressEl.value = user.adress;
roleEl.value = user.role;
// Show the modal window.
modalEl.show();
}
/**
......
......@@ -229,6 +229,7 @@ header {
fill-rule: evenodd;
width: 600px;
height: 200px;
object-fit: cover;
}
.bestseller-badge {
......@@ -1026,4 +1027,158 @@ h2 {
font-family: "DM Sans", sans-serif;
font-size: 20px;
color: #03355C;
}
\ No newline at end of file
}
/* Admin User löschen Modal */
#deleteButtonEdit {
background-color: #fb7300;
color: #ffffff;
border: none;
border-radius: 50px;
margin-left: 10px;
cursor: pointer;
}
#nodeleteButtonEdit {
background-color: #ffffff;
color: #fb7300;
border: none;
border-radius: 50px;
margin-left: 10px;
cursor: pointer;
}
/* Admin User bearbeiten Modal */
#updateButtonEdit {
background-color: #fb7300;
color: #ffffff;
border: none;
border-radius: 50px;
margin-left: 10px;
cursor: pointer;
}
.modal-card {
background-color: #FCF3E4; /* Heller Beige-Hintergrund */
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 20px;
width: auto; /* Breite des Formulars */
height: auto;
text-align: left;
}
#label1edituser {
padding: 10px;
}
#label2edituser {
padding: 10px;
}
#label3edituser {
padding: 10px;
}
#label4edituser {
padding: 10px;
}
#edit-user-admin-first-name {
border-radius: 70px;
}
#edit-user-admin-last-name {
border-radius: 70px;
}
#edit-user-admin-email {
border-radius: 70px;
}
#edit-user-admin-role {
border-radius: 70px;
}
#deleteModalLabel {
font-family: "DM Sans", sans-serif;
font-size: 20px;
color: #03355C;
}
.modal-body {
font-family: "DM Sans", sans-serif;
font-size: 15px;
}
#exampleModalLabel {
font-family: "DM Sans", sans-serif;
font-size: 20px;
color: #03355C;
}
#delete-button {
background-color: #fb7300;
color: #ffffff;
border: none;
border-radius: 50px;
margin-left: 10px;
cursor: pointer;
margin-top: 20px;
}
/* Admin User bearbeiten Modal */
#updateButtonEdit {
background-color: #fb7300;
color: #ffffff;
border: none;
border-radius: 50px;
margin-left: 10px;
cursor: pointer;
}
.modal-card {
background-color: #FCF3E4; /* Heller Beige-Hintergrund */
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
padding: 20px;
width: auto; /* Breite des Formulars */
height: auto;
text-align: left;
}
#label1edituser {
padding: 10px;
}
#label2edituser {
padding: 10px;
}
#label3edituser {
padding: 10px;
}
#label4edituser {
padding: 10px;
}
#edit-user-admin-first-name {
border-radius: 70px;
}
#edit-user-admin-last-name {
border-radius: 70px;
}
#edit-user-admin-email {
border-radius: 70px;
}
#edit-user-admin-role {
border-radius: 70px;
}
......@@ -8,6 +8,7 @@ CREATE TABLE `user` (
`eMail` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`adress` varchar(32) NOT NULL,
`role` varchar(255) NOT NULL,
PRIMARY KEY (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
......@@ -18,5 +19,5 @@ Die Logindaten für den Nutzer lauten:
Username: admin
Password: admin */
INSERT INTO `user` (`user_id`, `firstName`, `lastName`,`eMail`, `password`, `adress`) VALUES
(2, 'Bob', 'Hase','bob.hase@outlook.com', '09876543', 'Musterstraße 9, 12345 Musterstadt');
INSERT INTO `user` (`user_id`, `firstName`, `lastName`,`eMail`, `password`, `adress`, `role`) VALUES
(2, 'Bob', 'Hase','bob.hase@outlook.com', '09876543', 'Musterstraße 9, 12345 Musterstadt','admin');
......@@ -199,8 +199,8 @@ app.post('/login', async (req: Request, res: Response): Promise<void> => {
eMail: rows[0].eMail,
adress: rows[0].adress,
role: rows[0].role || 'user',
};
req.session.user = user; // Store user object in session for authentication
res.status(200).send({
message: 'Erfolgreich eingeloggt :)!',
......@@ -221,6 +221,7 @@ app.post('/login', async (req: Request, res: Response): Promise<void> => {
}
});
/**
* @api {post} /logout Logout user
* @apiName PostLogout
......@@ -436,14 +437,13 @@ app.put('/user', isLoggedIn, async (req: Request, res: Response): Promise<void>
eMail,
crypto.createHash("sha512").update(password).digest('hex'),
];
console.log("loggin " + data)
console.log("login " + data)
const query: string = 'SELECT * FROM user WHERE eMail = ? AND password = ?;';
try {
const [result] = await database.query<RowDataPacket[]>(query, data);
if (result.length != 1) {
res.status(404).send({
message: 'The user could not be found',
});
}
} catch (error) {
......@@ -455,15 +455,15 @@ app.put('/user', isLoggedIn, async (req: Request, res: Response): Promise<void>
// Check that all arguments are given
if (firstName && lastName && eMail && password) {
// Create database query and data
const data: [string, string, string, string, number] = [
const data: [string, string, string, string, string, number] = [
firstName,
lastName,
eMail,
// crypto.createHash("sha512").update(password).digest('hex'),
crypto.createHash("sha512").update(password).digest('hex'),
adress,
user_id
];
const query: string = 'UPDATE user SET firstName = ?, lastName = ?, eMail = ?, adress = ? WHERE user_id = ?;';
const query: string = 'UPDATE user SET firstName = ?, lastName = ?, eMail = ?, password = ?, adress = ? WHERE user_id = ?;';
console.log(query, data)
// Execute database query
......@@ -471,6 +471,54 @@ app.put('/user', isLoggedIn, async (req: Request, res: Response): Promise<void>
const [result] = await database.query<ResultSetHeader>(query, data);
console.log(result)
if (result.affectedRows != 1) {
res.status(404).send({
message: 'The user to update could not be found',
});
} else {
res.status(200).send({
message: `Deine Daten wurden erfolgreich abgeändert`,
});
}
} catch (error) {
res.status(500).send({
message: 'Database request failed: ' + error
});
}
} else {
res.status(400).send({
message: 'Not all mandatory fields are filled in',
});
}
});
// update route admin
app.put('/user/:userId', isLoggedIn, async (req: Request, res: Response): Promise<void> => {
// Read data from request
const userId: number = parseInt(req.params.userId);
const firstName: string = req.body.firstName;
const lastName: string = req.body.lastName;
const eMail: string = req.body.eMail;
const adress: string = req.body.adress;
const role: string = req.body.role;
// Check that all arguments are given
if (firstName && lastName && eMail && role) {
// Create database query and data
const data: [string, string, string, string, string, number] = [
firstName,
lastName,
eMail,
adress,
role,
userId
];
const query: string = 'UPDATE userlist SET firstName = ?, lastName = ?, eMail = ?, adress = ?, role = ?, WHERE user_id = ?;';
// Execute database query
try {
const [result] = await database.query<ResultSetHeader>(query, data);
if (result.affectedRows != 1) {
res.status(404).send({
message: 'The user to update could not be found',
......@@ -508,31 +556,42 @@ app.put('/user', isLoggedIn, async (req: Request, res: Response): Promise<void>
* }
*/
//Löscht den Benutzer.
app.delete('/user/:user_id', isLoggedIn, async (req: Request, res: Response): Promise<void> => {
// Route zum Löschen des eigenen Benutzerprofils
app.delete('/user', isLoggedIn, async (req: Request, res: Response): Promise<void> => {
console.log("delete user called")
// Read data from request
const user_id: number = parseInt(req.params.user_id);
const user_id: number = Number(req.session.user?.user_id);
// Delete user
const query: string = 'DELETE FROM user WHERE user_id = ?;';
try {
const [result] = await database.query<ResultSetHeader>(query, user_id);
// Führt die Löschoperation in der Datenbank aus
const [result] = await database.query<ResultSetHeader>(query, [user_id]);
if (result.affectedRows === 1) {
res.status(200).send({
message: `Successfully deleted user `,
// Löscht die Sitzung und sendet Erfolgsmeldung
req.session.destroy((err) => {
if (err) {
console.error('Session destruction error:', err);
}
res.status(200).send({
message: 'Profil erfolgreich gelöscht.'
});
});
} else {
// Sendet Fehlermeldung, wenn kein Benutzer gefunden wurde
res.status(404).send({
message: 'The user to be deleted could not be found',
message: 'Profil konnte nicht gelöscht werden. Versuche es später erneut.',
});
}
} catch (error) {
// Database operation has failed
} catch (error: unknown) {
// Sendet Fehlermeldung bei Datenbankfehler
res.status(500).send({
message: 'Database request failed: ' + error
message: 'Datenbankanfrage fehlgeschlagen: ' + error,
});
}
});
//stellt sicher, dass nur eingeloggte Benutzer Zugriff auf die Benutzerliste haben.
// Die Route ruft alle Benutzer aus der Tabelle user in der Datenbank ab.
// Sie wandelt die Ergebnisse der Datenbank in ein standardisiertes Format (User-Objekte) um.
......@@ -560,7 +619,7 @@ app.get('/users', isLoggedIn, async (req: Request, res: Response): Promise<void>
// Send user list to client
res.status(200).send({
userList: userList,
message: 'Successfully requested user list'
message: 'hier ist die Nutzerliste'
});
} catch (error) {
// Database operation has failed
......@@ -570,6 +629,31 @@ app.get('/users', isLoggedIn, async (req: Request, res: Response): Promise<void>
}
});
/**
* @api {delete} /user Benutzer löschen
* @apiName DeleteUser
* @apiGroup User
* @apiDescription Löscht das eigene Benutzerprofil
*
* @apiSuccess {String} message Erfolgsmeldung
*
* @apiSuccessExample {json} Success-Response:
* HTTP/1.1 200 OK
* {
* "message": "Nutzer erfolgreich gelöscht."
* }
*
* @apiError 404 Benutzer nicht gefunden
* @apiError 500 Datenbankfehler
*
* @apiErrorExample {json} Error-Response:
* HTTP/1.1 404 Not Found
* {
* "message": "Nutzer nicht gefunden."
* }
*/
/*****************************************************************************
* STATIC ROUTES *
*****************************************************************************/
......
......@@ -3,8 +3,20 @@ POST http://localhost:8080/login HTTP/1.1
Content-Type: application/json
{
"eMail": "lennardetzel@gmail.com",
"password": "123456789"
"eMail": "paula@gmx.de",
"password": "123"
}
###Delete specific user
DELETE http://localhost:8080/user/25 HTTP/1.1
### Update specific User
PUT http://localhost:8080/user HTTP/1.1
Content-Type: application/json
{
"givenName": "Laurin",
"familyName": "Etzel"
}
### Read User
......@@ -78,3 +90,4 @@ Content-Type: application/json
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment