Browse Source

Artikel-CRUD

master
Georg Spar 3 years ago
parent
commit
021dc02b0b
  1. 80
      spargcom/senuma/database/database.go
  2. BIN
      spargcom/senuma/senuma
  3. BIN
      spargcom/senuma/senuma.exe
  4. 112
      spargcom/senuma/senuma.go
  5. 33
      spargcom/senuma/senuma.log
  6. BIN
      spargcom/senuma/sparg@kub-01

80
spargcom/senuma/database/database.go

@ -33,6 +33,86 @@ func CreateArtikel(art domain.Artikel) (resArt domain.Artikel, err error) {
return resArt, err
}
func DeleteArtikel(artId uint64) (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 artikel WHERE id = ?", artId)
if err != nil {
log.Fatal("Error while executing DELETE statement", err)
}
return result, err
}
func ShowArtikel() (artArray []domain.Artikel, 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 artikel")
if err != nil {
log.Fatal("Error while executing SELECt statement", err)
}
var art domain.Artikel
for results.Next() {
err = results.Scan(&art.Id, &art.Bezeichnung, &art.ArtNrExt)
if err != nil {
log.Fatal("Error: ", err)
}
artArray = append(artArray, art)
}
return artArray, err
}
func GetArtikel(id uint64) (artikel domain.Artikel, 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 artikel WHERE id=?", id)
if err != nil {
log.Fatal("Error while executing SELECt statement", err)
}
for results.Next() {
err = results.Scan(&artikel.Id, &artikel.Bezeichnung, &artikel.ArtNrExt)
if err != nil {
log.Fatal("Error: ", err)
}
}
return artikel, err
}
func UpdateArtikel(art domain.Artikel) (resArt domain.Artikel, err error) {
conn, err := sql.Open(dbType, dbConnection)
if err != nil {
log.Println("Error while connecting DB: ", err)
}
log.Println("Verbindung hergestellt")
log.Println("Bezeichnung = ", art.Bezeichnung)
defer conn.Close()
_, err = conn.Exec("UPDATE artikel SET bezeichnung=?, artnr_ext=? WHERE id=?", art.Bezeichnung, art.ArtNrExt, art.Id)
if err != nil {
log.Println("Error while executing insert statement", err)
}
resArt = art
return resArt, err
}
/*func CreateUser(us domain.User) (resUs domain.User, err error) {
conn, err := sql.Open(dbType, dbConnection)
if err != nil {

BIN
spargcom/senuma/senuma

Binary file not shown.

BIN
spargcom/senuma/senuma.exe

Binary file not shown.

112
spargcom/senuma/senuma.go

@ -8,6 +8,7 @@ import (
"os"
"spargcom/senuma/database"
"spargcom/senuma/domain"
"strconv"
log "github.com/sirupsen/logrus"
@ -25,7 +26,12 @@ func main() {
log.SetOutput(file)
log.SetLevel(log.InfoLevel)
r := mux.NewRouter()
r.HandleFunc("/artikel", createArtikelHandler).Methods("POST")
r.Use(CORS)
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("/groups", createGroupHandler).Methods("POST")
@ -34,13 +40,14 @@ func main() {
//r.HandleFunc("/accounts", createAccountHandler).Methods("POST")
//r.HandleFunc("/tunnels", createTunnelHandler).Methods("POST")
http.Handle("/", r)
http.ListenAndServe(":8081", r)
log.Info("running on localhost, Port 8081")
}
func createArtikelHandler(writer http.ResponseWriter, req *http.Request) {
body, err := ioutil.ReadAll(req.Body)
if err != nil {
writer.WriteHeader(http.StatusBadRequest)
@ -49,6 +56,7 @@ func createArtikelHandler(writer http.ResponseWriter, req *http.Request) {
json.Unmarshal(body, &art)
log.Println("Bezeichnung = ", art.Bezeichnung)
log.Println("externe Art-Nr = ", art.ArtNrExt)
log.Info("creating new Artikel", art.Bezeichnung)
res, err := database.CreateArtikel(art)
if err != nil {
writer.WriteHeader(http.StatusInternalServerError)
@ -56,7 +64,7 @@ func createArtikelHandler(writer http.ResponseWriter, req *http.Request) {
b, err := json.Marshal(res)
if err != nil {
log.Println("Error: ", err)
log.Fatal("Error: ", err)
}
location := fmt.Sprintf("%s/%d", req.URL.String(), res.Id)
@ -65,3 +73,101 @@ func createArtikelHandler(writer http.ResponseWriter, req *http.Request) {
writer.WriteHeader(http.StatusCreated)
writer.Write(b)
}
func deleteArtikelHandler(writer http.ResponseWriter, req *http.Request) {
artikelId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64)
log.Info("Deleting artikel with ID", artikelId)
_, err := database.DeleteArtikel(artikelId)
if err != nil {
log.Fatal("Error: Delete could not be executed", err)
}
writer.WriteHeader(http.StatusNoContent)
}
func showArtikelHandler(writer http.ResponseWriter, req *http.Request) {
res, err := database.ShowArtikel()
if err != nil {
log.Fatal("Error: Artikel 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 getArtikelHandler(writer http.ResponseWriter, req *http.Request) {
artikelId, _ := strconv.ParseUint(mux.Vars(req)["id"], 10, 64)
res, err := database.GetArtikel(artikelId)
if err != nil {
log.Fatal("Error: Artikel 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 updateArtikelHandler(writer http.ResponseWriter, req *http.Request) {
body, err := ioutil.ReadAll(req.Body)
if err != nil {
writer.WriteHeader(http.StatusBadRequest)
}
var art domain.Artikel
json.Unmarshal(body, &art)
log.Println("Bezeichnung = ", art.Bezeichnung)
log.Println("externe Art-Nr = ", art.ArtNrExt)
log.Info("updating Artikel", art.Bezeichnung)
res, err := database.UpdateArtikel(art)
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)
}
func CORS(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
// Set headers
w.Header().Set("Access-Control-Allow-Headers:", "*")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Methods", "*")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
fmt.Println("ok")
// Next
next.ServeHTTP(w, r)
return
})
}

33
spargcom/senuma/senuma.log

@ -1,2 +1,35 @@
time="2021-05-12T22:07:25+02:00" level=info msg="Bezeichnung = HP ProLine 405 G6"
time="2021-05-12T22:07:25+02:00" level=info msg="externe Art-Nr = HPPL405G6"
time="2021-05-13T17:18:52+02:00" level=info msg="Deleting artikel with ID0"
time="2021-05-13T17:26:53+02:00" level=info msg="Deleting artikel with ID0"
time="2021-05-13T17:30:21+02:00" level=info msg="Deleting artikel with ID6"
time="2021-05-27T18:19:33+02:00" level=info msg="Deleting artikel with ID5"
time="2021-05-27T18:25:56+02:00" level=info msg="Deleting artikel with ID4"
time="2021-05-28T17:41:08+02:00" level=info msg="Bezeichnung = HP ProLine 405 G6"
time="2021-05-28T17:41:08+02:00" level=info msg="externe Art-Nr = HPPL405G6"
time="2021-05-28T17:41:08+02:00" level=info msg="creating new ArtikelHP ProLine 405 G6"
time="2021-05-28T17:41:22+02:00" level=info msg="Bezeichnung = HP ProLine 405 G6"
time="2021-05-28T17:41:22+02:00" level=info msg="externe Art-Nr = HPPL405G6"
time="2021-05-28T17:41:22+02:00" level=info msg="creating new ArtikelHP ProLine 405 G6"
time="2021-05-28T18:01:47+02:00" level=info msg="Bezeichnung = HP ProLine 405 G6"
time="2021-05-28T18:01:47+02:00" level=info msg="externe Art-Nr = HPPL405G6"
time="2021-05-28T18:01:47+02:00" level=info msg="creating new ArtikelHP ProLine 405 G6"
time="2021-05-28T18:06:47+02:00" level=info msg="Deleting artikel with ID8"
time="2021-05-28T18:07:50+02:00" level=info msg="Deleting artikel with ID8"
time="2021-05-28T18:08:06+02:00" level=info msg="Deleting artikel with ID9"
time="2021-05-28T18:09:19+02:00" level=info msg="Deleting artikel with ID7"
time="2021-05-28T21:22:39+02:00" level=info msg="Bezeichnung = fkgjkd"
time="2021-05-28T21:22:39+02:00" level=info msg="externe Art-Nr = 4857"
time="2021-05-28T21:22:39+02:00" level=info msg="creating new Artikelfkgjkd"
time="2021-05-28T22:29:14+02:00" level=info msg="Bezeichnung = Test"
time="2021-05-28T22:29:14+02:00" level=info msg="externe Art-Nr = 689ghjzui"
time="2021-05-28T22:29:14+02:00" level=info msg="creating new ArtikelTest"
time="2021-05-28T23:48:07+02:00" level=info msg="Bezeichnung = Test"
time="2021-05-28T23:48:07+02:00" level=info msg="externe Art-Nr = 689ghjzui"
time="2021-05-28T23:48:07+02:00" level=info msg="updating ArtikelTest"
time="2021-05-28T23:48:34+02:00" level=info msg="Bezeichnung = fkgjkd"
time="2021-05-28T23:48:34+02:00" level=info msg="externe Art-Nr = 4857"
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"

BIN
spargcom/senuma/sparg@kub-01

Binary file not shown.
Loading…
Cancel
Save