Aufräumaktion

This commit is contained in:
Marco Kittel 2025-07-19 19:27:47 +02:00
parent 886550318f
commit 3ac88bb796
7 changed files with 183 additions and 171 deletions

View File

@ -2,9 +2,7 @@ package main
import (
"context"
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"os"
@ -12,7 +10,6 @@ import (
"syscall"
"time"
"github.com/google/uuid"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/api"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/database"
)
@ -65,133 +62,12 @@ func main() {
fmt.Println("Connectionstring fehlt!. Bsp.: <user>:<passwort>@tcp(127.0.0.1:3306)/elio?parseTime=true")
return
}
//Dependency Injection
http.HandleFunc("/api/products", api.GetProductApiHandleFunc(nps))
//Todo schöner machen
http.HandleFunc("/api/products/reserve", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
var payload database.Container
err = json.Unmarshal(data, &payload)
if err != nil {
log.Printf("Could not parse Json: %s", err)
return
}
groupId := uuid.New().String()
result, err := nps.FetchReservationData(&payload, database.UUID(groupId))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
if len(result) == 0 {
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
}
_, err = nps.ReserviereBestellungen(result, database.UUID(groupId))
if err != nil {
log.Println(err)
}
jsonResult, err := json.Marshal(result[0])
if err != nil {
log.Println(err)
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, string(jsonResult))
})
http.HandleFunc("/api/products/confirm", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.ConfirmBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
})
http.HandleFunc("/api/products/release", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.ReleaseBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
})
http.HandleFunc("/api/products/abort", func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.AbortBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
})
http.HandleFunc("/api/products/reserve", api.GetProductReservationApiHandleFunc(nps))
http.HandleFunc("/api/products/confirm", api.GetConfirmReservationApiHandleFunc(nps))
http.HandleFunc("/api/products/release", api.GetReleaseReservationApiHandleFunc(nps))
http.HandleFunc("/api/products/abort", api.GetAbortApiHandleFunc(nps))
go func() {
log.Printf("Easy Peasy: Die Party startet auf Port %s\n", port)

View File

@ -2,50 +2,9 @@
CREATE DATABASE IF NOT EXISTS elio_test;
CREATE DATABASE IF NOT EXISTS elio;
-- -- Haupttabellen erzeugen
-- CREATE TABLE IF NOT EXISTS elio.warehouseproducts (
-- id INT AUTO_INCREMENT PRIMARY KEY,
-- warehouse char(2) NOT NULL,
-- productid VARCHAR(20) NOT NULL,
-- amount INT DEFAULT 0,
-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid)
-- ) ENGINE=InnoDB;
-- CREATE TABLE IF NOT EXISTS elio.deliverytimes (
-- id INT AUTO_INCREMENT PRIMARY KEY,
-- fromcountry varchar(4) NOT NULL,
-- tocountry varchar(4) NOT NULL,
-- state varchar(4) NULL,
-- delivery INT DEFAULT 0,
-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry)
-- ) ENGINE=InnoDB;
-- -- Testtabellen erzeugen
-- CREATE TABLE IF NOT EXISTS elio_test.warehouseproducts (
-- id INT AUTO_INCREMENT PRIMARY KEY,
-- warehouse char(2) NOT NULL,
-- productid VARCHAR(20) NOT NULL,
-- amount INT DEFAULT 0,
-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- CONSTRAINT location_product_must_be_one UNIQUE (warehouse, productid)
-- ) ENGINE=InnoDB;
-- CREATE TABLE IF NOT EXISTS elio_test.deliverytimes (
-- id INT AUTO_INCREMENT PRIMARY KEY,
-- fromcountry varchar(4) NOT NULL,
-- tocountry varchar(4) NOT NULL,
-- state varchar(4) NULL,
-- delivery INT DEFAULT 0,
-- created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
-- CONSTRAINT delivery_from_to_country_must_be_one UNIQUE (fromcountry, tocountry)
-- ) ENGINE=InnoDB;
-- Userkram
CREATE USER IF NOT EXISTS 'elio'@'%' IDENTIFIED BY 'eliogeheim';
CREATE USER IF NOT EXISTS 'elio_test'@'%' IDENTIFIED BY 'eliogeheim';
GRANT ALL PRIVILEGES ON elio.* TO 'elio'@'%';
GRANT ALL PRIVILEGES ON elio_test.* TO 'elio_test'@'%';
FLUSH PRIVILEGES;

View File

@ -0,0 +1,41 @@
package api
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/database"
)
func GetAbortApiHandleFunc(nps *database.ProductService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.AbortBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
}
}

View File

@ -0,0 +1,41 @@
package api
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/database"
)
func GetConfirmReservationApiHandleFunc(nps *database.ProductService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.ConfirmBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
}
}

View File

@ -0,0 +1,41 @@
package api
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/database"
)
func GetReleaseReservationApiHandleFunc(nps *database.ProductService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
payload := struct {
Id string `json:"id"`
}{}
err = json.Unmarshal(data, &payload)
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
err = nps.ReleaseBestellung(database.UUID(payload.Id))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
}
}

View File

@ -0,0 +1,54 @@
package api
import (
"encoding/json"
"fmt"
"io"
"log"
"net/http"
"github.com/google/uuid"
"gittea.marcokittel.de/elio/eliotools/datawriter/internal/database"
)
func GetProductReservationApiHandleFunc(nps *database.ProductService) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
if r.Method != "POST" {
return
}
defer r.Body.Close()
data, err := io.ReadAll(r.Body)
if err != nil {
log.Println(err)
return
}
var payload database.Container
err = json.Unmarshal(data, &payload)
if err != nil {
log.Printf("Could not parse Json: %s", err)
return
}
groupId := uuid.New().String()
result, err := nps.FetchReservationData(&payload, database.UUID(groupId))
if err != nil {
//Todo Fehlerhandling
log.Println(err)
}
if len(result) == 0 {
w.WriteHeader(http.StatusNoContent)
fmt.Fprintln(w)
return
}
_, err = nps.ReserviereBestellungen(result, database.UUID(groupId))
if err != nil {
log.Println(err)
}
jsonResult, err := json.Marshal(result[0])
if err != nil {
log.Println(err)
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, string(jsonResult))
}
}