Skip to content
Snippets Groups Projects
Commit 8f5bb64d authored by Sercan Yesildal's avatar Sercan Yesildal
Browse files

handler and services added

parent b97ae84b
No related branches found
No related tags found
No related merge requests found
...@@ -19,6 +19,36 @@ func getCampaign(r *http.Request) (*model.Campaign, error) { ...@@ -19,6 +19,36 @@ func getCampaign(r *http.Request) (*model.Campaign, error) {
return &campaign, nil return &campaign, nil
} }
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.Errorf("Error calling service CreateCampaign: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sendJson(w, campaign)
}
func GetCampaign(w http.ResponseWriter, r *http.Request) {
id, err := getId(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
campaign, err := service.GetCampaign(id)
if err != nil {
log.Errorf("Error retrieving campaign with ID %d: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sendJson(w, campaign)
}
func GetCampaigns(w http.ResponseWriter, _ *http.Request) { func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
campaigns, err := service.GetCampaigns() campaigns, err := service.GetCampaigns()
if err != nil { if err != nil {
...@@ -29,17 +59,37 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) { ...@@ -29,17 +59,37 @@ func GetCampaigns(w http.ResponseWriter, _ *http.Request) {
sendJson(w, campaigns) sendJson(w, campaigns)
} }
func CreateCampaign(w http.ResponseWriter, r *http.Request) { func UpdateCampaign(w http.ResponseWriter, r *http.Request) {
var campaign *model.Campaign id, err := getId(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
campaign, err := getCampaign(r) campaign, err := getCampaign(r)
if err != nil { if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest) http.Error(w, err.Error(), http.StatusBadRequest)
return return
} }
if err := service.CreateCampaign(campaign); err != nil { campaign, err = service.UpdateCampaign(id, campaign)
log.Errorf("Error calling service CreateCampaign: %v", err) if err != nil {
log.Errorf("Error updating campaign with ID dd: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
sendJson(w, campaign) sendJson(w, campaign)
} }
func DeleteCampaign(w http.ResponseWriter, r *http.Request) {
id, err := getId(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
err = service.DeleteCampaign(id)
if err != nil {
log.Errorf("Failure deleting campaign with ID %d: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sendJson(w, result{Success: "True"})
}
package handler
import (
"encoding/json"
"net/http"
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/service"
)
func getDonation(r *http.Request) (*model.Donation, error) {
var donation model.Donation
err := json.NewDecoder(r.Body).Decode(&donation)
if err != nil {
log.Errorf("Can't serialize request body to donation struct: %v", err)
return nil, err
}
return &donation, nil
}
func AddDonation(w http.ResponseWriter, r *http.Request) {
id, err := getId(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
donation, err := getDonation(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
err = service.AddDonation(id, donation)
if err != nil {
log.Errorf("Error adding donation to campaign with ID %d: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sendJson(w, donation)
}
...@@ -9,6 +9,7 @@ import ( ...@@ -9,6 +9,7 @@ import (
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/handler" "gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/handler"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model" "gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/service"
) )
func init() { func init() {
...@@ -24,7 +25,7 @@ func init() { ...@@ -24,7 +25,7 @@ func init() {
log.SetLevel(level) log.SetLevel(level)
} }
func main() { func loadSampleData() {
campaign := model.Campaign{ campaign := model.Campaign{
Name: "Spenden für eine bessere Note", Name: "Spenden für eine bessere Note",
OrganizerName: "Geheimnisvolle Ente", OrganizerName: "Geheimnisvolle Ente",
...@@ -50,12 +51,22 @@ func main() { ...@@ -50,12 +51,22 @@ func main() {
Status: model.IN_PROCESS, Status: model.IN_PROCESS,
}) })
service.CreateCampaign(&campaign)
}
func main() {
loadSampleData()
port := 8000 port := 8000
log.Infof("Starting MyAktion API server on port %v.\n", port) log.Infof("Starting MyAktion API server on port %v.\n", port)
router := mux.NewRouter() router := mux.NewRouter()
router.HandleFunc("/health", handler.Health).Methods("GET") router.HandleFunc("/health", handler.Health).Methods("GET")
router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET") router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST") router.HandleFunc("/campaigns", handler.CreateCampaign).Methods("POST")
router.HandleFunc("/campaigns/{id}", handler.GetCampaign).Methods("GET")
router.HandleFunc("/campaigns/{id}", handler.UpdateCampaign).Methods("PUT")
router.HandleFunc("/campaigns/{id}", handler.DeleteCampaign).Methods("DELETE")
router.HandleFunc("/campaigns/{id}/donation", handler.AddDonation).Methods("POST")
if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil { if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil {
log.Fatal(err) log.Fatal(err)
} }
......
package service package service
import ( import (
"fmt"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model" "gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
...@@ -15,6 +17,27 @@ func init() { ...@@ -15,6 +17,27 @@ func init() {
campaignStore = make(map[uint]*model.Campaign) campaignStore = make(map[uint]*model.Campaign)
} }
func CreateCampaign(campaign *model.Campaign) error {
campaign.ID = actCampaignId
campaignStore[actCampaignId] = campaign
actCampaignId += 1
log.Infof("Successfully stored new campaign with ID %v in database.", campaign.ID)
log.Tracef("Stored: %v", campaign)
return nil
}
func GetCampaign(id uint) (*model.Campaign, error) {
if campaign, ok := campaignStore[id]; !ok {
log.Info("Campaign with ID %d not found.", id)
return nil, fmt.Errorf("campaign with id %d not found", id)
} else {
log.Infof("Successfully retrieved campaign with ID %v.", campaign.ID)
log.Tracef("Retrieved: ", *campaign)
return campaign, nil
}
}
func GetCampaigns() ([]model.Campaign, error) { func GetCampaigns() ([]model.Campaign, error) {
var campaigns []model.Campaign var campaigns []model.Campaign
for _, campaign := range campaignStore { for _, campaign := range campaignStore {
...@@ -26,12 +49,26 @@ func GetCampaigns() ([]model.Campaign, error) { ...@@ -26,12 +49,26 @@ func GetCampaigns() ([]model.Campaign, error) {
return campaigns, nil return campaigns, nil
} }
func CreateCampaign(campaign *model.Campaign) error { func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
campaign.ID = actCampaignId if storeCampaign, ok := campaignStore[id]; !ok {
campaignStore[actCampaignId] = campaign log.Info("Campaign with ID %d not found.", id)
actCampaignId += 1 return nil, fmt.Errorf("campaign with id %d not found", id)
log.Infof("Successfully stored new campaign with ID %v in database.", campaign.ID) } else {
log.Tracef("Stored: %v", campaign) *storeCampaign = *campaign
storeCampaign.ID = id
log.Infof("Successfully updated campaign with ID %d.", id)
log.Tracef("Updated: %v", storeCampaign)
return storeCampaign, nil
}
}
return nil func DeleteCampaign(id uint) error {
if campaign, ok := campaignStore[id]; !ok {
log.Info("Campaign with ID %d not found.", id)
return fmt.Errorf("campaign with id %d not found", id)
} else {
delete(campaignStore, id)
log.Infof("Successfully deleted campaign with ID %v.", campaign.ID)
return nil
}
} }
package service
import (
"fmt"
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/yesildas/myaktion-go/src/myaktion/model"
)
func AddDonation(campaignId uint, donation *model.Donation) error {
campaign, err := GetCampaign(campaignId)
if err != nil {
log.Info("Campaign with ID %d not found.", campaignId)
return fmt.Errorf("campaign with id %d not found", campaignId)
}
if campaign.Donations == nil {
campaign.Donations = []model.Donation{}
}
campaign.Donations = append(campaign.Donations, *donation)
return 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