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

Added CreateCampaign and GetCampaigns implementation storing data in a global map.

parent 25eef452
No related branches found
No related tags found
No related merge requests found
package handler
import (
"encoding/json"
"log"
"net/http"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/service"
)
func CreateCampaign(w http.ResponseWriter, r *http.Request) {
var campaign model.Campaign
err := json.NewDecoder(r.Body).Decode(&campaign)
if err != nil {
log.Printf("Can't serialize request body to campaign struct: %v", err)
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
}
w.Header().Set("Content-Type", "application/json")
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) {
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)
}
}
...@@ -13,6 +13,8 @@ func main() { ...@@ -13,6 +13,8 @@ func main() {
fmt.Println("Starting MyAktion API server") fmt.Println("Starting MyAktion API server")
router := mux.NewRouter() router := mux.NewRouter()
router.HandleFunc("/health", handler.Health).Methods("GET") router.HandleFunc("/health", handler.Health).Methods("GET")
router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST")
router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
if err := http.ListenAndServe(":8000", router); err != nil { if err := http.ListenAndServe(":8000", router); err != nil {
log.Fatal(err) log.Fatal(err)
} }
......
package model package model
type Campaign struct { type Campaign struct {
ID uint
Name string Name string
OrganizerName string OrganizerName string
TargetAmount float64 TargetAmount float64
......
package service
import (
"log"
"gitlab.reutlingen-university.de/go-exercises/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)
}
return campaigns, nil
}
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