diff --git a/spargcom/senuma/database/database.go b/spargcom/senuma/database/database.go index 0d0e27c..20ea07d 100644 --- a/spargcom/senuma/database/database.go +++ b/spargcom/senuma/database/database.go @@ -13,6 +13,8 @@ var ( dbType = "mysql" ) +// Artikel + func CreateArtikel(art domain.Artikel) (resArt domain.Artikel, err error) { conn, err := sql.Open(dbType, dbConnection) if err != nil { @@ -113,6 +115,210 @@ func UpdateArtikel(art domain.Artikel) (resArt domain.Artikel, err error) { return resArt, err } +// Kunde + +func CreateKunde(kd domain.Kunde) (resKd domain.Kunde, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("Verbindung hergestellt") + log.Println("Name = ", kd.Name) + defer conn.Close() + + res, err := conn.Exec("INSERT INTO kunden VALUES(?,?,?)", kd.Id, kd.Name, kd.KdNrExt) + if err != nil { + log.Println("Error while executing insert statement", err) + } + lastId, err := res.LastInsertId() + kd.Id = uint(lastId) + resKd = kd + + return resKd, err +} + +func DeleteKunde(kdId uint) (result, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + _, err = conn.Exec("DELETE FROM kunden WHERE id = ?", kdId) + if err != nil { + log.Fatal("Error while executing DELETE statement", err) + } + return result, err +} + +func ShowKunde() (kdArray []domain.Kunde, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + results, err := conn.Query("SELECT * FROM kunden") + if err != nil { + log.Fatal("Error while executing SELECt statement", err) + } + + var kd domain.Kunde + for results.Next() { + err = results.Scan(&kd.Id, &kd.Name, &kd.KdNrExt) + if err != nil { + log.Fatal("Error: ", err) + } + kdArray = append(kdArray, kd) + } + return kdArray, err +} + +func GetKunde(id uint) (kunde domain.Kunde, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + results, err := conn.Query("SELECT * FROM kunden WHERE id=?", id) + if err != nil { + log.Fatal("Error while executing SELECt statement", err) + } + for results.Next() { + err = results.Scan(&kunde.Id, &kunde.Name, &kunde.KdNrExt) + if err != nil { + log.Fatal("Error: ", err) + } + } + + return kunde, err +} + +func UpdateKunde(ku domain.Kunde) (resKunde domain.Kunde, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("Verbindung hergestellt") + log.Println("Name = ", ku.Name) + defer conn.Close() + + _, err = conn.Exec("UPDATE kunden SET name=?, kdnr_ext=? WHERE id=?", ku.Name, ku.KdNrExt, ku.Id) + if err != nil { + log.Println("Error while executing insert statement", err) + } + + resKunde = ku + + return resKunde, err +} + +// Lieferanten + +func CreateLieferant(lief domain.Lieferant) (resLief domain.Lieferant, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("Verbindung hergestellt") + log.Println("Name = ", lief.Name) + defer conn.Close() + + res, err := conn.Exec("INSERT INTO lieferanten VALUES(?,?,?)", lief.Id, lief.Name, lief.LiefNrExt) + if err != nil { + log.Println("Error while executing insert statement", err) + } + lastId, err := res.LastInsertId() + lief.Id = uint(lastId) + resLief = lief + + return resLief, err +} + +func DeleteLieferant(liefId uint) (result, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + _, err = conn.Exec("DELETE FROM lieferanten WHERE id = ?", liefId) + if err != nil { + log.Fatal("Error while executing DELETE statement", err) + } + return result, err +} + +func ShowLieferant() (liefArray []domain.Lieferant, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + results, err := conn.Query("SELECT * FROM lieferanten") + if err != nil { + log.Fatal("Error while executing SELECt statement", err) + } + + var lief domain.Lieferant + for results.Next() { + err = results.Scan(&lief.Id, &lief.Name, &lief.LiefNrExt) + if err != nil { + log.Fatal("Error: ", err) + } + liefArray = append(liefArray, lief) + } + return liefArray, err +} + +func GetLieferant(id uint) (lieferant domain.Lieferant, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("DB Verbindung hergestellt") + defer conn.Close() + + results, err := conn.Query("SELECT * FROM lieferanten WHERE id=?", id) + if err != nil { + log.Fatal("Error while executing SELECt statement", err) + } + for results.Next() { + err = results.Scan(&lieferant.Id, &lieferant.Name, &lieferant.LiefNrExt) + if err != nil { + log.Fatal("Error: ", err) + } + } + + return lieferant, err +} + +func UpdateLieferant(lief domain.Lieferant) (resLief domain.Lieferant, err error) { + conn, err := sql.Open(dbType, dbConnection) + if err != nil { + log.Println("Error while connecting DB: ", err) + } + log.Println("Verbindung hergestellt") + log.Println("Name = ", lief.Name) + defer conn.Close() + + _, err = conn.Exec("UPDATE lieferanten SET name=?, liefnr_ext=? WHERE id=?", lief.Name, lief.LiefNrExt, lief.Id) + if err != nil { + log.Println("Error while executing insert statement", err) + } + + resLief = lief + + return resLief, err +} + /*func CreateUser(us domain.User) (resUs domain.User, err error) { conn, err := sql.Open(dbType, dbConnection) if err != nil { diff --git a/spargcom/senuma/senuma.exe b/spargcom/senuma/senuma.exe index a1ae93a..e089d09 100644 Binary files a/spargcom/senuma/senuma.exe and b/spargcom/senuma/senuma.exe differ diff --git a/spargcom/senuma/senuma.go b/spargcom/senuma/senuma.go index 618d445..6b490d9 100644 --- a/spargcom/senuma/senuma.go +++ b/spargcom/senuma/senuma.go @@ -27,12 +27,27 @@ func main() { log.SetLevel(log.InfoLevel) r := mux.NewRouter() r.Use(CORS) + + // Handler-Funktionscalls + r.HandleFunc("/api/artikel", createArtikelHandler).Methods("POST") r.HandleFunc("/api/artikel/{id:[0-9]+}", deleteArtikelHandler).Methods("DELETE") r.HandleFunc("/api/artikel", showArtikelHandler).Methods("GET") r.HandleFunc("/api/artikel/{id:[0-9]+}", getArtikelHandler).Methods("GET") r.HandleFunc("/api/artikel/{id:[0-9]+}", updateArtikelHandler).Methods("PUT") + r.HandleFunc("/api/kunden", createKundeHandler).Methods("POST") + r.HandleFunc("/api/kunden/{id:[0-9]+}", deleteKundeHandler).Methods("DELETE") + r.HandleFunc("/api/kunden", showKundeHandler).Methods("GET") + r.HandleFunc("/api/kunden/{id:[0-9]+}", getKundeHandler).Methods("GET") + r.HandleFunc("/api/kunden/{id:[0-9]+}", updateKundeHandler).Methods("PUT") + + r.HandleFunc("/api/lieferanten", createLieferantHandler).Methods("POST") + r.HandleFunc("/api/lieferanten/{id:[0-9]+}", deleteLieferantHandler).Methods("DELETE") + r.HandleFunc("/api/lieferanten", showLieferantHandler).Methods("GET") + r.HandleFunc("/api/lieferanten/{id:[0-9]+}", getLieferantHandler).Methods("GET") + r.HandleFunc("/api/lieferanten/{id:[0-9]+}", updateLieferantHandler).Methods("PUT") + //r.HandleFunc("/groups", createGroupHandler).Methods("POST") //r.HandleFunc("/users", createUserHandler).Methods("POST") @@ -46,6 +61,8 @@ func main() { } +// Artikel + func createArtikelHandler(writer http.ResponseWriter, req *http.Request) { body, err := ioutil.ReadAll(req.Body) @@ -151,6 +168,222 @@ func updateArtikelHandler(writer http.ResponseWriter, req *http.Request) { writer.Write(b) } +// Kunde + +func createKundeHandler(writer http.ResponseWriter, req *http.Request) { + + body, err := ioutil.ReadAll(req.Body) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + } + var kd domain.Kunde + json.Unmarshal(body, &kd) + log.Println("Name = ", kd.Name) + log.Println("externe Kd-Nr = ", kd.KdNrExt) + log.Info("creating new Kunde", kd.Name) + res, err := database.CreateKunde(kd) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id) + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusCreated) + writer.Write(b) +} + +func deleteKundeHandler(writer http.ResponseWriter, req *http.Request) { + kundeId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64) + log.Info("Deleting Kunde with ID", kundeId) + _, err := database.DeleteKunde(uint(kundeId)) + if err != nil { + log.Fatal("Error: Delete could not be executed", err) + } + writer.WriteHeader(http.StatusNoContent) +} + +func showKundeHandler(writer http.ResponseWriter, req *http.Request) { + + res, err := database.ShowKunde() + if err != nil { + log.Fatal("Error: Kunde can't be shown ", err) + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := req.URL.String() + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +func getKundeHandler(writer http.ResponseWriter, req *http.Request) { + kundeId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64) + res, err := database.GetKunde(kundeId) + if err != nil { + log.Fatal("Error: Kunde can't be shown ", err) + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := req.URL.String() + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +func updateKundeHandler(writer http.ResponseWriter, req *http.Request) { + body, err := ioutil.ReadAll(req.Body) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + } + var kunde domain.Kunde + json.Unmarshal(body, &kunde) + log.Println("Name = ", kunde.Name) + log.Println("externe Kd-Nr = ", kunde.KdNrExt) + log.Info("updating Kunde", kunde.Name) + res, err := database.UpdateKunde(kunde) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id) + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +// Lieferanten + +func createLieferantHandler(writer http.ResponseWriter, req *http.Request) { + + body, err := ioutil.ReadAll(req.Body) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + } + var lief domain.Lieferant + json.Unmarshal(body, &lief) + log.Println("Name = ", lief.Name) + log.Println("externe Lieferanten-Nr = ", lief.LiefNrExt) + log.Info("creating new Lieferant", lief.Name) + res, err := database.CreateLieferant(lief) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id) + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusCreated) + writer.Write(b) +} + +func deleteLieferantHandler(writer http.ResponseWriter, req *http.Request) { + lieferantId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64) + log.Info("Deleting Kunde with ID", lieferantId) + _, err := database.DeleteLieferant(uint(lieferantId)) + if err != nil { + log.Fatal("Error: Delete could not be executed", err) + } + writer.WriteHeader(http.StatusNoContent) +} + +func showLieferantHandler(writer http.ResponseWriter, req *http.Request) { + + res, err := database.ShowLieferant() + if err != nil { + log.Fatal("Error: Lieferant can't be shown ", err) + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := req.URL.String() + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +func getLieferantHandler(writer http.ResponseWriter, req *http.Request) { + lieferId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64) + res, err := database.GetLieferant(lieferId) + if err != nil { + log.Fatal("Error: Lieferant can't be shown ", err) + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := req.URL.String() + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +func updateLieferantHandler(writer http.ResponseWriter, req *http.Request) { + body, err := ioutil.ReadAll(req.Body) + if err != nil { + writer.WriteHeader(http.StatusBadRequest) + } + var lieferant domain.Lieferant + json.Unmarshal(body, &lieferant) + log.Println("Name = ", lieferant.Name) + log.Println("externe Lieferanten-Nr = ", lieferant.LiefNrExt) + log.Info("updating Lieferant", lieferant.Name) + res, err := database.UpdateLieferant(lieferant) + if err != nil { + writer.WriteHeader(http.StatusInternalServerError) + } + + b, err := json.Marshal(res) + if err != nil { + log.Fatal("Error: ", err) + } + + location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id) + writer.Header().Set("Location:", location) + writer.Header().Set("Content-Type", "application/json") + writer.WriteHeader(http.StatusOK) + writer.Write(b) +} + +// General + func CORS(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { diff --git a/spargcom/senuma/senuma.log b/spargcom/senuma/senuma.log index bd5cfa0..6202fdb 100644 --- a/spargcom/senuma/senuma.log +++ b/spargcom/senuma/senuma.log @@ -33,3 +33,9 @@ time="2021-05-28T23:48:34+02:00" level=info msg="updating Artikelfkgjkd" time="2021-05-28T23:54:30+02:00" level=info msg="Bezeichnung = HP ProLine 405 G6" time="2021-05-28T23:54:30+02:00" level=info msg="externe Art-Nr = HPPL405G6" time="2021-05-28T23:54:30+02:00" level=info msg="updating ArtikelHP ProLine 405 G6" +time="2021-05-29T00:05:23+02:00" level=info msg="Bezeichnung = fkgjkd_" +time="2021-05-29T00:05:23+02:00" level=info msg="externe Art-Nr = 4857def" +time="2021-05-29T00:05:23+02:00" level=info msg="updating Artikelfkgjkd_" +time="2021-05-29T21:02:42+02:00" level=info msg="Name = Walter Bau" +time="2021-05-29T21:02:42+02:00" level=info msg="externe Kd-Nr = 0" +time="2021-05-29T21:02:42+02:00" level=info msg="creating new KundeWalter Bau"