diff --git a/userman_all/client/index.html b/userman_all/client/index.html index 6bf7eefe30df3ea427ed6ce765e9871a29001679..72bcb70ed41d4ceeed2b7c82b9d80a134a21cf23 100644 --- a/userman_all/client/index.html +++ b/userman_all/client/index.html @@ -870,9 +870,9 @@ <section id="sectionNewReisebericht"> <h2>Meine Reiseberichte</h2> <div class="reisebericht-card" id="reisebericht-card"> - <h3 id="titelReise">Meine Reise in Indien</h3> - <h5 id="reiseland"> ...</h5> - <p id="reisebeschreibung">Das Projekt setzt sich dafür ein, Frauen in benachteiligten Regionen Indiens Zugang zu Bildung und beruflichen Chancen zu ermöglichen. Schon bei meiner Ankunft wurde deutlich, wie wichtig diese Arbeit ist: Die strahlenden Augen der Teilnehmerinnen und ihre Geschichten zeigten, dass Bildung für sie ein Tor zu einem besseren Leben bedeutet.</p> + <h3 id="titelReise"></h3> + <h5 id="reiseland"></h5> + <p id="reisebeschreibung"></p> <!-- Delete-Popup-Modal --> @@ -895,26 +895,28 @@ - <!-- Modal --> - <div class="modal fade" id="updateModalReisebericht"> + <!-- Modal Reisebericht updaten--> + <div class="modal fade" id="updateReviewModal" 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="exampleModalLabelReisebericht">Meinung geändert? Halte uns auf dem neusten Stand!</h1> - <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> - </div> - <div class="modal-body"> - <input type="hidden" id="edit-reisebericht-id"> - Titel - <label for="modal-title" class="d-none">Titel</label> - <input type="text" class="form-control-registrieren-modal" id="modal-title"> - Feedback - <label for="modal-description" class="d-none">Feedback</label> - <input type="text" class="form-control-registrieren-modal" id="modal-description"> - </div> - <div class="modal-footer"> - <button type="submit" id="saveButtonEditReisebericht" class="btn btn-primary">Sichern</button> - </div> + <form id="updateModalReisebericht"> + <div class="modal-header"> + <h1 class="modal-title fs-5" id="exampleModalLabelReisebericht">Meinung geändert? Halte uns auf dem neusten Stand!</h1> + <button type="button" class="btn-close" data-bs-dismiss="modal"></button> + </div> + <div class="modal-body card"> + <input type="hidden" id="edit-reisebericht-id"> + Titel + <label for="modal-title" class="d-none">Titel</label> + <input type="text" class="form-control-registrieren-modal" id="modal-title"> + Feedback + <label for="modal-description" class="d-none">Feedback</label> + <input type="text" class="form-control-registrieren-modal" id="modal-description"> + </div> + <div class="modal-footer"> + <button type="submit" id="saveButtonEditReisebericht" class="btn btn-primary">Sichern</button> + </div> + </form> </div> </div> </div> diff --git a/userman_all/client/src/client.ts b/userman_all/client/src/client.ts index 5f56d9b90b2f40f50e4c6072e68fdea0db2afdc6..5ba04012a29c78716fa4f2c9d16797f7122ae7d8 100644 --- a/userman_all/client/src/client.ts +++ b/userman_all/client/src/client.ts @@ -58,7 +58,7 @@ document.addEventListener("DOMContentLoaded", (): void => { modalTest = new bootstrap.Modal("#deleteModal"); modalAdmin = new bootstrap.Modal("#updateAdminModal"); modalAdminDelete = new bootstrap.Modal("#deleteModalAdmin"); - modalReview = new bootstrap.Modal("#updateModalReisebericht"); + modalReview = new bootstrap.Modal("#updateReviewModal"); //--- check, if user is already logged in (e.g. after refresh) ------------------------------------------------------- @@ -365,6 +365,7 @@ document.addEventListener("DOMContentLoaded", (): void => { }); const data: any = await res.json(); addMessage(data.message); + showPage('meineReiseberichte'); // Hide the modal window modalReview.hide(); @@ -525,17 +526,19 @@ function renderReviews(reviewsList: Review[]): void { p.textContent = reviews.description.toString(); - // Delete button + // Delete button Reisebericht let deleteReviewButton: HTMLButtonElement = document.createElement("button"); deleteReviewButton.className = "small-button-delete"; deleteReviewButton.textContent = "Reisebericht löschen"; deleteReviewButton.addEventListener("click", async () => { - const res: Response = await fetch('/reviews' + reviews.reviews_id, { + console.log(`DELETE Request an: /reviews/${reviews.reviews_id}`); + const res: Response = await fetch(`/reviews/${reviews.reviews_id}`, { method: 'DELETE' }); const data: any = await res.json(); addMessage(data.message); readReviews(); + showPage('meineReiseberichte'); }); // Edit button diff --git a/userman_all/server/src/server.ts b/userman_all/server/src/server.ts index 6c26f648e156b2fb24d4f1cefaa9f52077426371..bfb76f7b743ac1b531426e03050e8e379319fbeb 100644 --- a/userman_all/server/src/server.ts +++ b/userman_all/server/src/server.ts @@ -64,6 +64,7 @@ app.use(session({ declare module 'express-session' { interface SessionData { user?: User + reviews?: Review } } @@ -889,7 +890,7 @@ app.post('/reviews', isLoggedIn, async (req: Request, res: Response): Promise<vo user_id, ]; //soll in review tabelle gespeichert werden - const query: string = 'INSERT INTO reviews (title, description, country, user_id) VALUES (?, ?, ?, ?, ?);'; + const query: string = 'INSERT INTO reviews (title, description, country, user_id) VALUES (?, ?, ?, ?);'; try { const [rows] = await database.query<RowDataPacket[]>(query, data); @@ -948,7 +949,7 @@ app.get('/reviews', isLoggedIn, async (req: Request, res: Response): Promise<voi app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): Promise<void> => { // Read data from request - const reviews_id: number = parseInt(req.params.reviews_id); + const reviews_id: number = Number(req.params.reviews_id); const title: string = req.body.title; const description: string = req.body.description; // Check that all arguments are given @@ -967,11 +968,11 @@ app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): if (result.affectedRows != 1) { res.status(404).send({ - message: 'The review to update could not be found', + message: 'der Reisebericht konnte nicht gefunden werden', }); } else { res.status(200).send({ - message: `Successfully updated review`, + message: `erfolgreich bearbeitet`, }); } } catch (error) { @@ -988,13 +989,18 @@ app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): //Delete Review app.delete('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): Promise<void> => { - // Read data from request - const reviews_id: number = parseInt(req.params.reviews_id); +// Read data from request + const reviews_id: number = Number(req.params.reviews_id); + + if (isNaN(reviews_id)) { + res.status(400).send({ message: "Ungültige ID erhalten!" }); + return; + } // Delete user const query: string = 'DELETE FROM reviews WHERE reviews_id = ?;'; try { - const [result] = await database.query<ResultSetHeader>(query, reviews_id); - if (result.affectedRows === 1) { + const [result] = await database.query<ResultSetHeader>(query, [reviews_id]); + if (result.affectedRows !== 0) { res.status(200).send({ message: `Löschen des Erfahrungsberichts war erfolgreich!`, });