diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index a56ab6a0ba3982e21c480bccdab3455ba7e03edb..e641a4078956810bfba37b46a926f5f71cc47bf8 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -1,6 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="SqlDialectMappings"> + <file url="file://$PROJECT_DIR$/datenbank-final-horizon_changers-dump.sql" dialect="MySQL" /> <file url="file://$PROJECT_DIR$/userman_all/server/db/init.sql" dialect="MySQL" /> </component> </project> \ No newline at end of file diff --git a/userman_all/client/index.html b/userman_all/client/index.html index 913d12e5b0a1e74fa5f10d9e3a6007cbb951febe..96bcb445bcb28f1705473bd30b968fa6559080e3 100644 --- a/userman_all/client/index.html +++ b/userman_all/client/index.html @@ -831,10 +831,10 @@ <label for="country">Land auswählen</label> <select id="country" name="country"> <option value="">-- Bitte wählen --</option> - <option value="spanien">Spanien</option> - <option value="peru">Peru</option> - <option value="indien">Indien</option> - <option value="kenia">Kenia</option> + <option value="Spanien - Pfoten ohne Grenzen!">Spanien</option> + <option value="Peru - Bausteine der Gesundheit">Peru</option> + <option value="Indien - Bildungslicht für Frauen">Indien</option> + <option value="Kenia - Lebensquellen Kenia">Kenia</option> </select> <label for="titleReisebericht">Titel</label> diff --git a/userman_all/client/stylesheet.css b/userman_all/client/stylesheet.css index 8729a2d5ba855be4f25179529fbafb18ce43a6cc..da555c603de0e4ff85db8aaf2b974b2b1f25db64 100644 --- a/userman_all/client/stylesheet.css +++ b/userman_all/client/stylesheet.css @@ -1725,7 +1725,6 @@ padding: 20px; } .small-button-edit { - color: #03355C; border: 1px solid #FB7300; border-radius: 50px; margin-top: 10px; @@ -1739,4 +1738,33 @@ padding: 20px; font-size: 20px; border-radius: 50px; cursor: pointer; +} + +#exampleModalLabelReisebericht { + font-family: "DM Sans", sans-serif; +} +#updateModalReisebericht { + background:#FCF3E4; + display: flex; + align-items: center; + border-radius: 20px; + flex-direction: column; + +} + +.modal-body.card { + border-color:#FCF3E4; + background-color: #FCF3E4; + border-radius: 10px; + box-shadow: none; + margin-top: 15px; +} +#saveButtonEditReisebericht { + color: #ffffff; + background-color: #fb7300; + border-radius: 50px; + border: none; +} +.modal-footer { + border-color:#FCF3E4; } \ No newline at end of file diff --git a/userman_all/server/doc/index.html b/userman_all/server/doc/index.html index 9e997c127e1e1b8f25932b221fb2985d7a1d4210..1f6cc3b7ff3711216a27f3f6fc31dae8ed668277 100644 --- a/userman_all/server/doc/index.html +++ b/userman_all/server/doc/index.html @@ -5,15 +5,15 @@ <meta name="description" content="horizon changers website"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> - <link href="assets/bootstrap.min.css?v=1737968153982" rel="stylesheet" media="screen"> - <link href="assets/prism.css?v=1737968153982" rel="stylesheet" /> - <link href="assets/prism-toolbar.css?v=1737968153982" rel="stylesheet" /> - <link href="assets/prism-diff-highlight.css?v=1737968153982" rel="stylesheet" /> - <link href="assets/main.css?v=1737968153982" rel="stylesheet" media="screen, print"> - <link href="assets/favicon.ico?v=1737968153982" rel="icon" type="image/x-icon"> - <link href="assets/apple-touch-icon.png?v=1737968153982" rel="apple-touch-icon" sizes="180x180"> - <link href="assets/favicon-32x32.png?v=1737968153982" rel="icon" type="image/png" sizes="32x32"> - <link href="assets/favicon-16x16.png?v=1737968153982" rel="icon" type="image/png" sizes="16x16"> + <link href="assets/bootstrap.min.css?v=1738144941061" rel="stylesheet" media="screen"> + <link href="assets/prism.css?v=1738144941061" rel="stylesheet" /> + <link href="assets/prism-toolbar.css?v=1738144941061" rel="stylesheet" /> + <link href="assets/prism-diff-highlight.css?v=1738144941061" rel="stylesheet" /> + <link href="assets/main.css?v=1738144941061" rel="stylesheet" media="screen, print"> + <link href="assets/favicon.ico?v=1738144941061" rel="icon" type="image/x-icon"> + <link href="assets/apple-touch-icon.png?v=1738144941061" rel="apple-touch-icon" sizes="180x180"> + <link href="assets/favicon-32x32.png?v=1738144941061" rel="icon" type="image/png" sizes="32x32"> + <link href="assets/favicon-16x16.png?v=1738144941061" rel="icon" type="image/png" sizes="16x16"> </head> <body class="container-fluid"> @@ -1042,6 +1042,6 @@ </div> </div> -<script src="assets/main.bundle.js?v=1737724955109"></script> +<script src="assets/main.bundle.js?v=1738144941061"></script> </body> </html> diff --git a/userman_all/server/src/server.ts b/userman_all/server/src/server.ts index 4f4ee33678e41f935d3992e2a5f6aba60b30f19c..90a306af6caa2dc8769895100209def91c0c8342 100644 --- a/userman_all/server/src/server.ts +++ b/userman_all/server/src/server.ts @@ -1046,8 +1046,51 @@ app.get('/reviews', isLoggedIn, async (req: Request, res: Response): Promise<voi } }); -/// Update Review + +/** + * @api {put} /reviews/:reviews_id Reisebericht bearbeiten + * @apiName ReiseberichtBearbeiten + * @apiGroup Reviews + * + * @apiDescription Aktualisiert einen bestehenden Reisebericht anhand der angegebenen ID. Der Nutzer muss eingeloggt sein, um auf diese Route zugreifen zu können. + * + * @apiHeader {String} Cookie Session-Cookie zur Authentifizierung des Nutzers. + * + * @apiParam {Number} reviews_id Die ID des zu bearbeitenden Reiseberichts (Pfad-Parameter). + * @apiParam {String} title Der neue Titel des Reiseberichts. + * @apiParam {String} description Die neue Beschreibung des Reiseberichts. + * + * @apiSuccess {String} message Bestätigungsnachricht über die erfolgreiche Bearbeitung. + * + * @apiSuccessExample Erfolg: + * HTTP/1.1 200 OK + * { + * "message": "erfolgreich bearbeitet" + * } + * + * @apiError {String} message Fehlermeldung bei ungültigen Eingaben oder fehlgeschlagener Bearbeitung. + * + * @apiErrorExample {json} 400 Fehler (Fehlende Felder): + * HTTP/1.1 400 Bad Request + * { + * "message": "füll alle Felder aus" + * } + * + * @apiErrorExample {json} 404 Fehler (Nicht gefunden): + * HTTP/1.1 404 Not Found + * { + * "message": "der Reisebericht konnte nicht gefunden werden" + * } + * + * @apiErrorExample {json} 500 Fehler (Datenbankproblem): + * HTTP/1.1 500 Internal Server Error + * { + * "message": "Database request failed: [Fehlerdetails]" + * } + */ + +/// Update Review app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): Promise<void> => { // Read data from request const reviews_id: number = Number(req.params.reviews_id); @@ -1069,11 +1112,11 @@ app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): if (result.affectedRows != 1) { res.status(404).send({ - message: 'der Reisebericht konnte nicht gefunden werden', + message: 'Der Reisebericht konnte nicht gefunden werden', }); } else { res.status(200).send({ - message: `erfolgreich bearbeitet`, + message: `Dein Reisebericht wurde erfolgreich bearbeitet! Danke :)`, }); } } catch (error) { @@ -1083,11 +1126,54 @@ app.put('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): } } else { res.status(400).send({ - message: 'füll alle Felder aus', + message: 'Fülle bitte alle Felder aus.', }); } }); + + +/** + * @api {delete} /reviews/:reviews_id Reisebericht löschen + * @apiName ReiseberichtLöschen + * @apiGroup Reviews + * + * @apiDescription Löscht einen bestehenden Reisebericht anhand der angegebenen ID. Der Nutzer muss eingeloggt sein, um auf diese Route zugreifen zu können. + * + * @apiHeader {String} Cookie Session-Cookie zur Authentifizierung des Nutzers. + * + * @apiParam {Number} reviews_id Die ID des zu löschenden Reiseberichts (Pfad-Parameter). + * + * @apiSuccess {String} message Bestätigungsnachricht über die erfolgreiche Löschung. + * + * @apiSuccessExample Erfolg: + * HTTP/1.1 200 OK + * { + * "message": "Löschen des Erfahrungsberichts war erfolgreich!" + * } + * + * @apiError {String} message Fehlermeldung bei ungültigen Eingaben oder fehlgeschlagener Löschung. + * + * @apiErrorExample {json} 400 Fehler (Ungültige ID): + * HTTP/1.1 400 Bad Request + * { + * "message": "Ungültige ID erhalten!" + * } + * + * @apiErrorExample {json} 404 Fehler (Nicht gefunden): + * HTTP/1.1 404 Not Found + * { + * "message": "Der Beitrag, der gelöscht werden soll, konnte nicht gefunden werden." + * } + * + * @apiErrorExample {json} 500 Fehler (Datenbankproblem): + * HTTP/1.1 500 Internal Server Error + * { + * "message": "Database request failed: [Fehlerdetails]" + * } + */ + + //Delete Review app.delete('/reviews/:reviews_id', isLoggedIn, async (req: Request, res: Response): Promise<void> => { // Read data from request diff --git a/userman_all/server/test/horizon_changers.http b/userman_all/server/test/horizon_changers.http index 5f7ee5099a147ebead6d1e8e5997d90d7932fbf6..a916efb51316d1e3814910aed63258633090be73 100644 --- a/userman_all/server/test/horizon_changers.http +++ b/userman_all/server/test/horizon_changers.http @@ -1,124 +1,113 @@ -### Login +### Login User POST http://localhost:8080/login HTTP/1.1 Content-Type: application/json { - "eMail": "amelieenders@gmail.com", - "password": "amelie" + "eMail": "jj@gmail.com", + "password": "???" } -### Update specific user admin -PUT http://localhost:8080/user/10 HTTP/1.1 -Content-Type: application/json - -{ - "firstName": "Bruce", - "lastName": "Kayne", - "eMail": "bato", - "adress": "Fetzwiesen 4", - "role": "user" -} - -### Update user +### Update user Data in Profile PUT http://localhost:8080/user HTTP/1.1 Content-Type: application/json { - "firstName": "Amelie", - "lastName": "Dralle", - "eMail": "amelie@gmail.com", - "password": "amelie" + "firstName": "Peter", + "lastName": "Shawn", + "eMail": "ps@gmail.com", + "password": "???" } ### Read User -GET http://localhost:8080/user/76 HTTP/1.1 +GET http://localhost:8080/user/21 HTTP/1.1 ### Read User GET http://localhost:8080/user/500 HTTP/1.1 -### Login +### Login Admin POST http://localhost:8080/login HTTP/1.1 Content-Type: application/json { - "eMail": "lilith@fa.gmx.de", - "password": "passwort" + "eMail": "sarah.gloger@outlook.com", + "password": "1234" } -### Create a new user richtige Route +### Create a new user / Registrieren Erfolgsfall POST http://localhost:8080/user HTTP/1.1 Content-Type: application/json { - "firstName": "Daria", - "lastName": "Krawtschenko", - "eMail": "daria@gmail.com", + "firstName": "Bruce", + "lastName": "Wayne", + "eMail": "bat@mail.de", "password": "1234", "repeatPassword": "1234" } -### Create a new user verschiedene Paswörter +### Create a new user / Fehlerhafte Passwortwiederholung (Fehlerfall) POST http://localhost:8080/user HTTP/1.1 Content-Type: application/json { - "firstName": "Leonie", - "lastName": "Lutz", - "eMail": "lutzleo@gmail.com", - "password": "1234", - "repeatPassword": "123456" + "firstName": "Clemens", + "lastName": "Witzel", + "eMail": "clemens.witzel@gmail.com", + "password": "clemi", + "repeatPassword": "clemi" } -### Create a new user eMail fehlt +### Create a new user / Fehlerfall, nicht alle Felder ausgefüllt POST http://localhost:8080/user HTTP/1.1 Content-Type: application/json { -"firstName": "Bruce", -"lastName": "Wayne", -"password": "1234", -"repeatPassword": "1234" +"firstName": "Leo", +"lastName": "Roth", +"password": "Leo", +"repeatPassword": "Leo" } -### Logout +### Logout User POST http://localhost:8080/logout HTTP/1.1 -### Delete user Nutzer + +### Delete User (eigenes Profil löschen) DELETE http://localhost:8080/user HTTP/1.1 -####Read Users Nutzerliste Admin +####Read Users Admin Liste GET http://localhost:8080/users HTTP/1.1 -### Update specific user Admin -PUT http://localhost:8080/user/70 HTTP/1.1 +### Update specific user (User 10 updaten) Admin +PUT http://localhost:8080/user/10 HTTP/1.1 Content-Type: application/json { - "firstName": "Minette", - "lastName": "Stark", - "eMail": "minette@gmail.com", - "adress": "Fetzwiesen 4", + "firstName": "Jörg", + "lastName": "Gloger", + "eMail": "jörg", + "adress": "Waldstraße 9, 35799 Merenberg", "role": "user" } -### Update specific user -PUT http://localhost:8080/user/79 HTTP/1.1 +### Update specific user (User 1 updaten, existiert nicht) +PUT http://localhost:8080/user/1 HTTP/1.1 Content-Type: application/json { - "givenName": "Selina", - "familyName": "Kyle" + "givenName": "Alina", + "familyName": "Hoffmann" } -### Delete specific user -DELETE http://localhost:8080/user/80 HTTP/1.1 +### Delete specific user (User 7) +DELETE http://localhost:8080/user/7 HTTP/1.1 -### Delete specific user -DELETE http://localhost:8080/user/76 HTTP/1.1 +### Delete specific user (User 1) +DELETE http://localhost:8080/user/1 HTTP/1.1