Aufgabe 9 und paar kleine Übungen

branch-francesca
Francesca Bläse 2025-12-03 07:40:45 +00:00
parent f3859ea3e4
commit 082eb3009e
9 changed files with 431 additions and 0 deletions

View File

@ -0,0 +1,20 @@
// Produktarray
const produkte = [
{ produkt: "Joghurt", preis: 2.49 },
{ produkt: "Brot", preis: 3.29 },
{ produkt: "Käse", preis: 8.99 },
{ produkt: "Duschgel", preis: 2.79 }
];
// neues Array
const rabattProdukte = produkte.map(p => {
return {
produkt: p.produkt,
preis: (p.preis * 0.9).toFixed(2) // Preis um 10% reduziert und gerundet
};
});
// Ausgabe
console.log(rabattProdukte);

View File

@ -0,0 +1,5 @@
module db_insert
go 1.24.5
require github.com/lib/pq v1.10.9

View File

@ -0,0 +1,2 @@
github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=

View File

@ -0,0 +1,166 @@
package main
import (
"database/sql"
"fmt"
"log"
"net/http"
"strings"
_ "github.com/lib/pq"
)
// INSERT
type insertHandler int
func (ihandler insertHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// auf Post prüfen
if r.Method != http.MethodPost {
http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed)
return
}
//Formulardaten einlesen
err := r.ParseForm()
if err != nil {
http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest)
return
}
name := r.FormValue("name")
alter := r.FormValue("alter")
hobbies := r.Form["hobby"]
// alter und name sollten vorhanden sein
if name == "" {
http.Error(w, "Name fehlt", http.StatusBadRequest)
return
}
if alter == "" {
http.Error(w, "Alter fehlt", http.StatusBadRequest)
return
}
// Hobbies mit Komma separiert zusammenfügen
alleHobbies := strings.Join(hobbies, ", ")
//DB Verbindung öffnen
connStr := "user=devuser password=devpass dbname=devdb host=localhost port=5432 sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Println("Datenbank nicht erreichbar", err)
http.Error(w, "Server Fehler", http.StatusInternalServerError)
return
}
defer db.Close()
//Verbindung testen
err = db.Ping()
if err != nil {
log.Println("Datenbank nicht erreichbar", err)
http.Error(w, "Interner Server Error", http.StatusInternalServerError)
return
}
log.Println("Verbindung erfolgreich hergestellt")
//Insert
query := `INSERT INTO personen (name, hobbies, alter) VALUES ($1, $2, $3)`
_, err = db.Exec(query, name, alleHobbies, alter)
if err != nil {
log.Println("Fehler beim Einfügen der Daten", err)
http.Error(w, "Interner Server Fehler", http.StatusInternalServerError)
return
}
fmt.Fprintln(w, "Datensatz erfolgreich eingefügt")
}
// UPDATE
type updateHandler int
func (uhandler updateHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
// nur POST erlauben
if r.Method != http.MethodPost {
http.Error(w, "Nur Post ist erlaubt", http.StatusMethodNotAllowed)
return
}
// Formulardaten einlesen
err := r.ParseForm()
if err != nil {
http.Error(w, "gesendetes Formular ungültig", http.StatusBadRequest)
return
}
name := r.FormValue("name")
alter := r.FormValue("alter")
hobbies := r.Form["hobby"]
if name == "" {
http.Error(w, "Name fehlt", http.StatusBadRequest)
return
}
if alter == "" {
http.Error(w, "Alter fehlt", http.StatusBadRequest)
return
}
// Hobbies zusammenfügen
alleHobbies := strings.Join(hobbies, ", ")
// DB-Verbindung
connStr := "user=devuser dbname=devdb host=localhost port=5432 sslmode=disable"
db, err := sql.Open("postgres", connStr)
if err != nil {
log.Println("Datenbank nicht erreichbar", err)
http.Error(w, "Server Fehler", http.StatusInternalServerError)
return
}
defer db.Close()
err = db.Ping()
if err != nil {
log.Println("Datenbank nicht erreichbar", err)
http.Error(w, "Interner Server Fehler", http.StatusInternalServerError)
return
}
// Update-Query
query := `UPDATE personen SET hobbies = $1, alter = $2 WHERE name = $3`
res, err := db.Exec(query, alleHobbies, alter, name)
if err != nil {
log.Println("Fehler beim Update", err)
http.Error(w, "Interner Server Fehler", http.StatusInternalServerError)
return
}
rowsAffected, _ := res.RowsAffected()
if rowsAffected == 0 {
http.Error(w, "Kein Datensatz mit diesem Namen gefunden", http.StatusNotFound)
return
}
fmt.Fprintln(w, "Datensatz erfolgreich aktualisiert")
}
func main() {
var ihandler insertHandler
var uhandler updateHandler
http.Handle("/insert", ihandler) // Insert-Endpunkt
http.Handle("/update", uhandler) // Update-Endpunkt
log.Println("Server startet auf http://localhost:8080")
log.Fatal(http.ListenAndServe("localhost:8080", nil))
}

View File

@ -0,0 +1,9 @@
const zahlen = [38, 0, 226, 384, 111, 500383];
for (let i = 0; i < zahlen.length; i++){
if (zahlen[i] === 0){
console.log("Null");
} else {
console.log(zahlen[i] % 2 === 0 ? "Gerade Zahl" : "Ungerade Zahl")
}
}

View File

@ -0,0 +1,37 @@
<!DOcTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" method="POST">
<title>Anamesebogen</title>
</head>
<body>
<h1>Anamesebogen</h1>
<h2>Bitte ausfüllen</h2>
<form>
<fieldset>
<legend>Persönliches</legend>
<label for="name">Name:</label>
<input type="text" name="name" id="name" required><br><br>
<label for="vorname">Vorname:</label>
<input type="text" name="vorname" id="vorname" required><br><br>
<label for="gebdatum">Geburtsdatum</label>
<input type="date" name="gebdatum" id="gebdatum" required><br><br>
<label for="gender">Geschlecht</label>
<select name="gender" id="gender" required><br><br>
<option value="Weiblich">weiblich</option>
<option value="männlich">männlich</option>
<option value="divers">divers</option>
<option value="ka">keine Angabe</option>
</select>
</fieldset>
<fieldset>
<legend>Körperdaten</legend>
<label for="gewicht">Gewicht (kg):</label>
<input type="number" name="gewicht" id="gewicht"><br><br>
<label for="groesse">Größe (cm):</label>
<input type="number" name="groesse" id="groesse"><br><br>
</fieldset>
<button type="submit">Absenden</button>
</form>
</body>
</html>

View File

@ -0,0 +1,62 @@
package main
import (
"encoding/json"
"net/http"
"time"
)
// ist ein Struct sowas wie eine Klasse in Java ?
type Klient struct {
Name string `json:"name"`
Vorname string `json:"vorname"`
Gebdatum time.Time `json:"gebdatum"`
Geschlecht string `json:"gender"`
Gewicht int `json:"gewicht"`
Groesse int `json:"groesse"`
}
func anameseHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Methode ungültig", http.StatusMethodNotAllowed)
return
}
// ist ka dann eine Art Objekt von der Klasse KLient?
var k Klient
err := json.NewDecoder(r.Body).Decode(&k)
if err != nil {
http.Error(w, "Kein gültiges Json", http.StatusBadRequest)
return
}
if k.Name == "" || k.Vorname == "" || k.Geschlecht == "" {
http.Error(w, "Pflichtfelder sind leer", http.StatusBadRequest)
return
}
if k.Gebdatum.IsZero() {
http.Error(w, "Geburtsdatum fehlt", http.StatusBadRequest)
return
}
if k.Gewicht == 0 || k.Groesse == 0 {
warnings = append(warnings, "BMI kann nicht berechnet werden")
}
// Erfolg und Warnung zurückgeben wnn genu wird die response varibale genutzt?
response := map[string]interface{}{
"message:": "Klient erfolgreich angelegt",
"warnings": warnings,
}
//ok response habe ich hier gefunden, aber den Rest dieses Codes verstehe ich gerade nich
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusCreated)
json.NewEncoder(w).Encode(response)
}
func main() {
}

View File

@ -0,0 +1,45 @@
openapi: 3.0.x
info:
title: Anamese API
version: 1.0.0
description: API für Anamesebogen
servers:
- url: http://localhost:8080
paths:
/anamese:
post:
summary: Daten erfassen
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/Klient'
responses:
'200':
description: Klient erfolgreich angelegt
'400':
description: Eingaben ungültig
components:
schemas:
Klient:
type: object
properties:
name:
type: string
vorname:
type: string
gebdatum:
type: date
gender:
type: string
enum: [weiblich, männluch, divers, ka]
gewicht:
type: number
groesse:
type: number
required:
- name
- vorname
- gebdatum
- gender

View File

@ -0,0 +1,85 @@
openapi: 3.0.x
info:
title: Wichteln
version: 1.0.0
description: API für Wichtelaktion
servers:
- url: http://localhost:8080
paths:
/wichtelaktion:
post:
summary: Aktion anlegen
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
adminEmail:
type: string
format: email
startDate:
type: string
format: date
endDate:
type: string
format: date
required:
- name
- adminEmail
- startDate
- endDate
responses:
'200':
description: Aktion erfolgreich erstellt
'400':
description: Aktion konnte nicht erstellt werden
/wichtelaktion/{id}/invite:
post:
summary: Teilnehmer einladen und Tokens generieren
parameters:
- name: id
in: path
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
emails:
type: array
items:
type: string
reqired:
- emails
responses:
'200':
description: Teilnehmer erfolgreich eingeladen
'400':
description: Teilnehmer konnten nicht eingeladen werden
/wichtelaktion/{id}/:
put:
summary: Wichtelaktion bearbeiten
parameters:
- name: id
in: path
required: true
schema:
type: string
responseBody:
required: true
content:
application/json:
schema: