From 8bdeb9fa77da5b7140c395d9af7751f05873b0a6 Mon Sep 17 00:00:00 2001
From: Sercan Yesildal <sercan.yesildal@gmail.com>
Date: Mon, 17 Apr 2023 16:18:55 +0200
Subject: [PATCH] refactoring and utility functions added

---
 src/myaktion/handler/campaign.go | 31 ++++++++++++++++---------------
 src/myaktion/handler/utils.go    | 32 ++++++++++++++++++++++++++++++++
 2 files changed, 48 insertions(+), 15 deletions(-)
 create mode 100644 src/myaktion/handler/utils.go

diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
index 2689fbf..13b3203 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 0000000..026e93a
--- /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
+}
-- 
GitLab