diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go index 2689fbf456bbb301fed7f27a6a79012fdd00f804..13b32038597ebe0684c7f2f5d7c542fea686c0b6 100644 --- a/src/myaktion/handler/campaign.go +++ b/src/myaktion/handler/campaign.go @@ -2,13 +2,23 @@ package handler import ( "encoding/json" - "log" "net/http" + log "github.com/sirupsen/logrus" "gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model" "gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/service" ) +func getCampaign(r *http.Request) (*model.Campaign, error) { + var campaign model.Campaign + err := json.NewDecoder(r.Body).Decode(&campaign) + if err != nil { + log.Errorf("Can't serialize request body to campaign struct: %v", err) + return nil, err + } + return &campaign, nil +} + func GetCampaigns(w http.ResponseWriter, _ *http.Request) { campaigns, err := service.GetCampaigns() if err != nil { @@ -16,29 +26,20 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) { http.Error(w, err.Error(), http.StatusInternalServerError) return } - w.Header().Set("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(campaigns); err != nil { - log.Printf("Failure encoding value to JSON: %v", err) - http.Error(w, err.Error(), http.StatusInternalServerError) - } + sendJson(w, campaigns) } func CreateCampaign(w http.ResponseWriter, r *http.Request) { - var campaign model.Campaign - err := json.NewDecoder(r.Body).Decode(&campaign) + var campaign *model.Campaign + campaign, err := getCampaign(r) if err != nil { - log.Printf("Can't serialize request body to campaign struct: %v", err) http.Error(w, err.Error(), http.StatusBadRequest) return } - if err := service.CreateCampaign(&campaign); err != nil { + if err := service.CreateCampaign(campaign); err != nil { log.Printf("Error calling service CreateCampaign: %v", err) http.Error(w, err.Error(), http.StatusInternalServerError) return } - w.Header().Set("Content-Type", "application/json") - if err := json.NewEncoder(w).Encode(campaign); err != nil { - log.Printf("Failure encoding value to JSON: %v", err) - http.Error(w, err.Error(), http.StatusInternalServerError) - } + sendJson(w, campaign) } diff --git a/src/myaktion/handler/utils.go b/src/myaktion/handler/utils.go new file mode 100644 index 0000000000000000000000000000000000000000..026e93ab3cc45a87eb8150094f3846fdd63af799 --- /dev/null +++ b/src/myaktion/handler/utils.go @@ -0,0 +1,32 @@ +package handler + +import ( + "encoding/json" + "net/http" + "strconv" + + "github.com/gorilla/mux" + log "github.com/sirupsen/logrus" +) + +type result struct { + Success string `json:"success"` +} + +func sendJson(w http.ResponseWriter, value interface{}) { + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(value); err != nil { + log.Errorf("Failure encoding value to JSON: %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func getId(r *http.Request) (uint, error) { + vars := mux.Vars(r) + id, err := strconv.ParseUint(vars["id"], 10, 0) + if err != nil { + log.Errorf("Can't get ID from request: %v", err) + return 0, err + } + return uint(id), nil +}