Skip to content
Snippets Groups Projects
Commit f76cba5d authored by Flnal's avatar Flnal
Browse files

Projekt gerade gezogen

parent 7fb25a32
No related branches found
No related tags found
1 merge request!3Master
...@@ -31,7 +31,10 @@ func main() { ...@@ -31,7 +31,10 @@ func main() {
router.HandleFunc("/health", handler.Health).Methods("GET") router.HandleFunc("/health", handler.Health).Methods("GET")
router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST") router.HandleFunc("/campaign", handler.CreateCampaign).Methods("POST")
router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET") router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
router.HandleFunc("/campaign/{id}", handler.GetCampaign2).Methods("GET") router.HandleFunc("/campaigns/{id}", handler.GetCampaign).Methods("GET")
router.HandleFunc("/campaigns/{id}", handler.DeleteCampaign).Methods("DELETE")
router.HandleFunc("/campaigns/{id}", handler.UpdateCampaign).Methods("PUT")
router.HandleFunc("/campaigns/{id}/donation", handler.AddDonation).Methods("POST")
if err := http.ListenAndServe(":8000", router); err != nil { if err := http.ListenAndServe(":8000", router); err != nil {
log.Fatal(err) log.Fatal(err)
} }
......
...@@ -11,14 +11,13 @@ import ( ...@@ -11,14 +11,13 @@ import (
) )
func CreateCampaign(w http.ResponseWriter, r *http.Request) { func CreateCampaign(w http.ResponseWriter, r *http.Request) {
var campaign *model.Campaign 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 { if err = service.CreateCampaign(campaign); err != nil {
log.Errorf("Error calling service CreateCampaign: %v", err) log.Printf("Error calling service CreateCampaign: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
...@@ -28,37 +27,81 @@ func CreateCampaign(w http.ResponseWriter, r *http.Request) { ...@@ -28,37 +27,81 @@ func CreateCampaign(w http.ResponseWriter, r *http.Request) {
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 {
log.Errorf("Error calling service GetCampaigns: %v", err) log.Printf("Error calling service GetCampaigns: %v", err)
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
sendJson(w, campaigns) sendJson(w, campaigns)
} }
func GetCampaign(r *http.Request) (*model.Campaign, error) { func GetCampaign(w http.ResponseWriter, r *http.Request) {
var campaign model.Campaign id, err := getId(r)
err := json.NewDecoder(r.Body).Decode(&campaign)
if err != nil { if err != nil {
log.Errorf("Can't serialize request body to campaign struct: %v", err) http.Error(w, err.Error(), http.StatusBadRequest)
return nil, err return
} }
return &campaign, nil campaign, err := service.GetCampaign(id)
if err != nil {
log.Errorf("Failure retrieving campaign with ID %v: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if campaign == nil {
http.Error(w, "404 campaign not found", http.StatusNotFound)
return
}
sendJson(w, campaign)
} }
func GetCampaign2(w http.ResponseWriter, r *http.Request) { func UpdateCampaign(w http.ResponseWriter, r *http.Request) {
id, idErr := getId(r) id, err := getId(r)
if idErr != nil { if err != nil {
log.Errorf("Error calling service getId: %v", idErr) http.Error(w, err.Error(), http.StatusBadRequest)
http.Error(w, idErr.Error(), http.StatusInternalServerError)
return return
} }
campaign, err := getCampaign(r)
if err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
campaign, err = service.UpdateCampaign(id, campaign)
if err != nil {
log.Errorf("Failure updating campaign with ID %v: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if campaign == nil {
http.Error(w, "404 campaign not found", http.StatusNotFound)
return
}
sendJson(w, campaign)
}
resCampaign, err := service.GetCampaign2(id) func DeleteCampaign(w http.ResponseWriter, r *http.Request) {
id, err := getId(r)
if err != nil { if err != nil {
log.Errorf("Error calling service GetCampaign: %v", err) http.Error(w, err.Error(), http.StatusBadRequest)
return
}
campaign, err := service.DeleteCampaign(id)
if err != nil {
log.Errorf("Failure deleting campaign with ID %v: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError) http.Error(w, err.Error(), http.StatusInternalServerError)
return return
} }
log.Infof("Campaign with the ID %v was printed", resCampaign.ID) if campaign == nil {
sendJson(w, resCampaign) http.Error(w, "404 campaign not found", http.StatusNotFound)
return
}
sendJson(w, result{Success: "OK"})
}
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
} }
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 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
}
// TODO: if the campaign doesn't exist, return 404 - don't show FK error
err = service.AddDonation(id, donation)
if err != nil {
log.Errorf("Failure adding donation to campaign with ID %v: %v", id, err)
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
sendJson(w, donation)
}
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
}
package service package service
import ( import (
"errors" "fmt"
log "github.com/sirupsen/logrus" log "github.com/sirupsen/logrus"
...@@ -21,8 +21,8 @@ func CreateCampaign(campaign *model.Campaign) error { ...@@ -21,8 +21,8 @@ func CreateCampaign(campaign *model.Campaign) error {
campaign.ID = actCampaignId campaign.ID = actCampaignId
campaignStore[actCampaignId] = campaign campaignStore[actCampaignId] = campaign
actCampaignId += 1 actCampaignId += 1
log.Infof("Successfully stored new campaign with ID %v in database.", campaign.ID) log.Printf("Successfully stored new campaign with ID %v in database.", campaign.ID)
log.Tracef("Stored: %v", campaign) log.Printf("Stored: %v", campaign)
return nil return nil
} }
...@@ -31,19 +31,41 @@ func GetCampaigns() ([]model.Campaign, error) { ...@@ -31,19 +31,41 @@ func GetCampaigns() ([]model.Campaign, error) {
for _, campaign := range campaignStore { for _, campaign := range campaignStore {
campaigns = append(campaigns, *campaign) campaigns = append(campaigns, *campaign)
} }
log.Tracef("Retrieved: %v", campaigns)
return campaigns, nil return campaigns, nil
} }
func GetCampaign2(requestedID uint) (model.Campaign, error) { func GetCampaign(id uint) (*model.Campaign, error) {
var resCampaign model.Campaign campaign := campaignStore[id]
for _, campaign := range campaignStore { if campaign == nil {
if campaign.ID == requestedID { return nil, fmt.Errorf("no campaign with ID %d", id)
resCampaign = *campaign }
log.Tracef("Retrieved: %v", resCampaign) log.Tracef("Retrieved: %v", campaign)
return campaign, nil
}
func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
existingCampaign, err := GetCampaign(id)
if err != nil {
return existingCampaign, err
}
existingCampaign.Name = campaign.Name
existingCampaign.OrganizerName = campaign.OrganizerName
existingCampaign.TargetAmount = campaign.TargetAmount
existingCampaign.DonationMinimum = campaign.DonationMinimum
entry := log.WithField("ID", id)
entry.Info("Successfully updated campaign.")
entry.Tracef("Updated: %v", campaign)
return existingCampaign, nil
}
return resCampaign, nil func DeleteCampaign(id uint) (*model.Campaign, error) {
} campaign, err := GetCampaign(id)
if err != nil {
return campaign, err
} }
return resCampaign, errors.New("keine Campaign mit der ID wurde gefunden") delete(campaignStore, id)
entry := log.WithField("ID", id)
entry.Info("Successfully deleted campaign.")
entry.Tracef("Deleted: %v", campaign)
return campaign, nil
} }
package service
import (
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model"
)
func AddDonation(campaignId uint, donation *model.Donation) error {
campaign, err := GetCampaign(campaignId)
if err != nil {
return err
}
campaign.Donations = append(campaign.Donations, *donation)
entry := log.WithField("ID", campaignId)
entry.Info("Successfully added new donation to campaign.")
entry.Tracef("Stored: %v", 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