From c3a4cab368a4c3d882cae2a28c312094636f7429 Mon Sep 17 00:00:00 2001
From: Sercan Yesildal <sercan.yesildal@gmail.com>
Date: Mon, 17 Apr 2023 16:02:31 +0200
Subject: [PATCH] logger and campaign list service added

---
 src/myaktion/go.mod              |  7 ++++++-
 src/myaktion/go.sum              | 16 ++++++++++++++++
 src/myaktion/handler/campaign.go | 14 ++++++++++++++
 src/myaktion/main.go             | 17 ++++++++++++++++-
 src/myaktion/service/campaign.go | 10 ++++++++++
 5 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/src/myaktion/go.mod b/src/myaktion/go.mod
index 7f52193..0c7df43 100644
--- a/src/myaktion/go.mod
+++ b/src/myaktion/go.mod
@@ -2,4 +2,9 @@ module gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion
 
 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.7.0 // indirect
diff --git a/src/myaktion/go.sum b/src/myaktion/go.sum
index 5350288..ee6c613 100644
--- a/src/myaktion/go.sum
+++ b/src/myaktion/go.sum
@@ -1,2 +1,18 @@
+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/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/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
+golang.org/x/sys v0.7.0 h1:3jlCCIQZPdOYu1h8BkNvLz8Kgwtae2cagcG/VamtZRU=
+golang.org/x/sys v0.7.0/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=
diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
index 7d136c5..2689fbf 100644
--- a/src/myaktion/handler/campaign.go
+++ b/src/myaktion/handler/campaign.go
@@ -9,6 +9,20 @@ import (
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/service"
 )
 
+func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
+	campaigns, err := service.GetCampaigns()
+	if err != nil {
+		log.Printf("Error calling service GetCampaigns: %v", err)
+		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)
+	}
+}
+
 func CreateCampaign(w http.ResponseWriter, r *http.Request) {
 	var campaign model.Campaign
 	err := json.NewDecoder(r.Body).Decode(&campaign)
diff --git a/src/myaktion/main.go b/src/myaktion/main.go
index 3e31ead..db230eb 100644
--- a/src/myaktion/main.go
+++ b/src/myaktion/main.go
@@ -2,14 +2,28 @@ package main
 
 import (
 	"fmt"
-	"log"
 	"net/http"
+	"os"
 
 	"github.com/gorilla/mux"
+	log "github.com/sirupsen/logrus"
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/handler"
 	"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
 )
 
+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() {
 	campaign := model.Campaign{
 		Name:               "Spenden für eine bessere Note",
@@ -40,6 +54,7 @@ func main() {
 	log.Printf("Starting MyAktion API server on port %v.\n", port)
 	router := mux.NewRouter()
 	router.HandleFunc("/health", handler.Health).Methods("GET")
+	router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
 	router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST")
 	if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
 		log.Fatal(err)
diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
index 41b6812..f03182d 100644
--- a/src/myaktion/service/campaign.go
+++ b/src/myaktion/service/campaign.go
@@ -15,6 +15,16 @@ func init() {
 	campaignStore = make(map[uint]*model.Campaign)
 }
 
+func GetCampaigns() ([]model.Campaign, error) {
+	var campaigns []model.Campaign
+	for _, campaign := range campaignStore {
+		campaigns = append(campaigns, *campaign)
+	}
+	log.Printf("Retrieved: %v", campaigns)
+
+	return campaigns, nil
+}
+
 func CreateCampaign(campaign *model.Campaign) error {
 	campaign.ID = actCampaignId
 	campaignStore[actCampaignId] = campaign
-- 
GitLab