diff --git a/src/myaktion/handler/campaign.go b/src/myaktion/handler/campaign.go new file mode 100644 index 0000000000000000000000000000000000000000..c14c362e8184a95c4b1fed3b204afcd769aa36ce --- /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 0000000000000000000000000000000000000000..026e93ab3cc45a87eb8150094f3846fdd63af799 --- /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 0000000000000000000000000000000000000000..c8f2a843e250e916ee8468da7928bc6e9d0e140d --- /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 +}