This repository has been archived on 2025-05-14. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Hochzeit/app.go
2022-01-17 11:04:04 +01:00

71 lines
1.5 KiB
Go

package main
import (
"encoding/json"
"log"
"net/http"
"github.com/google/uuid"
"github.com/gorilla/mux"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/postgres"
)
type Besucher struct {
ID string `json:"id"`
Name string `json:"name"`
Message string `json:"message"`
Come bool `json:"come"`
}
type App struct {
db *gorm.DB
r *mux.Router
}
func (a *App) start() {
a.db.AutoMigrate()
a.r.HandleFunc("/besucher", a.getAllBesucher).Methods("GET")
a.r.HandleFunc("/besucher", a.addBesucher).Methods("POST")
log.Fatal(http.ListenAndServe(":3001", a.r))
}
func (a *App) getAllBesucher(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var all []Besucher
err := a.db.Find(&all).Error
if err != nil {
sendErr(w, http.StatusInternalServerError, err.Error())
return
}
err = json.NewEncoder(w).Encode(all)
if err != nil {
sendErr(w, http.StatusInternalServerError, err.Error())
}
}
func (a *App) addBesucher(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
var s Besucher
err := json.NewDecoder(r.Body).Decode(&s)
if err != nil {
sendErr(w, http.StatusBadRequest, err.Error())
return
}
s.ID = uuid.New().String()
err = a.db.Save(&s).Error
if err != nil {
sendErr(w, http.StatusInternalServerError, err.Error())
} else {
w.WriteHeader(http.StatusCreated)
}
}
func sendErr(w http.ResponseWriter, code int, message string) {
resp, _ := json.Marshal(map[string]string{"error": message})
http.Error(w, string(resp), code)
}