From e9fe4bf34a37042e0634ed6f9ebbb923fdfa9fb3 Mon Sep 17 00:00:00 2001 From: Flnal <74874325+Flnal@users.noreply.github.com> Date: Mon, 17 Apr 2023 16:33:56 +0200 Subject: [PATCH] added files --- src/myaktion/handler/campaign.go | 46 ++++++++++++++++++++++++++++++++ src/myaktion/handler/utils.go | 32 ++++++++++++++++++++++ src/myaktion/service/campaign.go | 34 +++++++++++++++++++++++ 3 files changed, 112 insertions(+) create mode 100644 src/myaktion/handler/campaign.go create mode 100644 src/myaktion/handler/utils.go create mode 100644 src/myaktion/service/campaign.go diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go new file mode 100644 index 0000000..c14c362 --- /dev/null +++ b/src/myaktion/handler/campaign.go @@ -0,0 +1,46 @@ +package handler + +import ( + "encoding/json" + "net/http" + + log "github.com/sirupsen/logrus" + + "gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model" + "gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/service" +) + +func CreateCampaign(w http.ResponseWriter, r *http.Request) { + var campaign *model.Campaign + campaign, err := GetCampaign(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateCampaign(campaign); err != nil { + log.Printf("Error calling service CreateCampaign: %v", err) + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, campaign) +} + +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 + } + sendJson(w, campaigns) +} + +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 +} 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 +} diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go new file mode 100644 index 0000000..c8f2a84 --- /dev/null +++ b/src/myaktion/service/campaign.go @@ -0,0 +1,34 @@ +package service + +import ( + "log" + + "gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model" +) + +var ( + campaignStore map[uint]*model.Campaign + actCampaignId uint = 1 +) + +func init() { + campaignStore = make(map[uint]*model.Campaign) +} + +func CreateCampaign(campaign *model.Campaign) error { + campaign.ID = actCampaignId + campaignStore[actCampaignId] = campaign + actCampaignId += 1 + log.Printf("Successfully stored new campaign with ID %v in database.", campaign.ID) + 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