From 39d4921c46603e32ab275c9741ce0fa4bfaf5b93 Mon Sep 17 00:00:00 2001
From: Martin Schmollinger <martin.schmollinger@reutlingen-university.de>
Date: Mon, 14 Apr 2025 13:38:02 +0200
Subject: [PATCH] Added GET List of Camapaign Resources

---
 src/myaktion/handler/campaign.go | 14 ++++++++++++++
 src/myaktion/main.go             |  1 +
 src/myaktion/service/campaign.go |  9 +++++++++
 3 files changed, 24 insertions(+)

diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go
index 78e0ada..f03b909 100644
--- a/src/myaktion/handler/campaign.go
+++ b/src/myaktion/handler/campaign.go
@@ -28,3 +28,17 @@ func CreateCampaign(w http.ResponseWriter, r *http.Request) {
 		http.Error(w, err.Error(), http.StatusInternalServerError)
 	}
 }
+
+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)
+	}
+}
diff --git a/src/myaktion/main.go b/src/myaktion/main.go
index d64e39c..32f6d85 100644
--- a/src/myaktion/main.go
+++ b/src/myaktion/main.go
@@ -14,6 +14,7 @@ func main() {
 	router := mux.NewRouter()
 	router.HandleFunc("/health", handler.Health).Methods("GET")
 	router.HandleFunc("/campaigns", handler.CreateCampaign).Methods("POST")
+	router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
 	if err := http.ListenAndServe(":8000", router); err != nil {
 		log.Fatal(err)
 	}
diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go
index 97721d8..b15144d 100644
--- a/src/myaktion/service/campaign.go
+++ b/src/myaktion/service/campaign.go
@@ -23,3 +23,12 @@ func CreateCampaign(campaign *model.Campaign) error {
 	log.Printf("Stored: %v", campaign)
 	return nil
 }
+
+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
+}
-- 
GitLab