Skip to content
Snippets Groups Projects
Commit bc176132 authored by Martin Schmollinger's avatar Martin Schmollinger
Browse files

Added helper functions to reduce code redundancy

parent 5732f1ff
No related branches found
No related tags found
No related merge requests found
...@@ -2,4 +2,9 @@ module gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion ...@@ -2,4 +2,9 @@ module gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion
go 1.20 go 1.20
require github.com/gorilla/mux v1.8.0 require (
github.com/gorilla/mux v1.8.0
github.com/sirupsen/logrus v1.9.0
)
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 h1:0A+M6Uqn+Eje4kHMK80dtF3JCXC4ykBgQG4Fe06QRhQ=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
...@@ -2,31 +2,26 @@ package handler ...@@ -2,31 +2,26 @@ package handler
import ( import (
"encoding/json" "encoding/json"
"log"
"net/http" "net/http"
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/service" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/service"
) )
func CreateCampaign(w http.ResponseWriter, r *http.Request) { func CreateCampaign(w http.ResponseWriter, r *http.Request) {
var campaign model.Campaign campaign, err := GetCampaign(r)
err := json.NewDecoder(r.Body).Decode(&campaign)
if err != nil { if err != nil {
log.Printf("Can't serialize request body to campaign struct: %v", err)
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return return
} }
if err := service.CreateCampaign(&campaign); err != nil { if err = service.CreateCampaign(campaign); err != nil {
log.Printf("Error calling service CreateCampaign: %v", err) log.Printf("Error calling service CreateCampaign: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set("Content-Type", "application/json") sendJson(w, campaign)
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)
}
} }
func GetCampaigns(w http.ResponseWriter, _ *http.Request) { func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
...@@ -36,9 +31,15 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) { ...@@ -36,9 +31,15 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
w.Header().Set("Content-Type", "application/json") sendJson(w, campaigns)
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) 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
} }
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
}
...@@ -2,13 +2,29 @@ package main ...@@ -2,13 +2,29 @@ package main
import ( import (
"fmt" "fmt"
"log" "os"
log "github.com/sirupsen/logrus"
"net/http" "net/http"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/handler" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/handler"
) )
func init() {
// init logger
log.SetFormatter(&log.TextFormatter{})
log.SetReportCaller(true)
level, err := log.ParseLevel(os.Getenv("LOG_LEVEL"))
if err != nil {
log.Info("Log level not specified, set default to: INFO")
log.SetLevel(log.InfoLevel)
return
}
log.SetLevel(level)
}
func main() { func main() {
fmt.Println("Starting MyAktion API server") fmt.Println("Starting MyAktion API server")
router := mux.NewRouter() router := mux.NewRouter()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment