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

Added PATCH (campaign) call to API

parent a5128b85
No related branches found
No related tags found
No related merge requests found
...@@ -91,6 +91,37 @@ func DeleteCampaign(w http.ResponseWriter, r *http.Request) { ...@@ -91,6 +91,37 @@ func DeleteCampaign(w http.ResponseWriter, r *http.Request) {
sendJson(w, result{Success: "OK"}) sendJson(w, result{Success: "OK"})
} }
func PatchCampaign(w http.ResponseWriter, r *http.Request) {
//extract id from url path
id, err := getId(r)
if err != nil {
//Bad Request
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
//Read Body
var campaign *model.Campaign
campaign, err = getCampaign(r)
if err != nil {
log.Printf("Error calling service PatchCampaign: %v", err)
http.Error(w, err.Error(), http.StatusBadRequest)
}
//Call service function
campaign, err = service.PatchCampaign(id, campaign)
if err != nil {
log.Errorf("Failure patching 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)
log.Errorf("Campaign with ID %v not found: %v", id, err)
return
}
//Send result OK
sendJson(w, campaign)
}
func getCampaign(r *http.Request) (*model.Campaign, error) { func getCampaign(r *http.Request) (*model.Campaign, error) {
var campaign model.Campaign var campaign model.Campaign
err := json.NewDecoder(r.Body).Decode(&campaign) err := json.NewDecoder(r.Body).Decode(&campaign)
......
...@@ -31,6 +31,7 @@ func main() { ...@@ -31,6 +31,7 @@ func main() {
router.HandleFunc("/campaigns", handler.CreateCampaign).Methods("POST") router.HandleFunc("/campaigns", handler.CreateCampaign).Methods("POST")
router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET") router.HandleFunc("/campaigns", handler.GetCampaigns).Methods("GET")
router.HandleFunc("/campaigns/{id}", handler.UpdateCampaign).Methods("PUT") router.HandleFunc("/campaigns/{id}", handler.UpdateCampaign).Methods("PUT")
router.HandleFunc("/campaigns/{id}", handler.PatchCampaign).Methods("PATCH")
router.HandleFunc("/campaigns/{id}", handler.DeleteCampaign).Methods("DELETE") router.HandleFunc("/campaigns/{id}", handler.DeleteCampaign).Methods("DELETE")
router.HandleFunc("/campaigns/{id}/donation", handler.AddDonation).Methods("POST") 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 {
......
...@@ -40,26 +40,6 @@ func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) ...@@ -40,26 +40,6 @@ func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error)
return existingCampaign, nil return existingCampaign, nil
} }
func PatchCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
existingCampaign, err := GetCampaign(id)
if existingCampaign == nil || err != nil {
return existingCampaign, err
}
existingCampaign.Name = campaign.Name
existingCampaign.OrganizerName = campaign.OrganizerName
existingCampaign.TargetAmount = campaign.TargetAmount
existingCampaign.DonationMinimum = campaign.DonationMinimum
existingCampaign.Account = campaign.Account
result := db.DB.Save(existingCampaign)
if result.Error != nil {
return nil, result.Error
}
entry := log.WithField("ID", id)
entry.Info("Successfully updated campaign.")
entry.Tracef("Updated: %v", existingCampaign)
return existingCampaign, nil
}
func DeleteCampaign(id uint) (*model.Campaign, error) { func DeleteCampaign(id uint) (*model.Campaign, error) {
campaign, err := GetCampaign(id) campaign, err := GetCampaign(id)
if campaign == nil || err != nil { if campaign == nil || err != nil {
...@@ -97,3 +77,39 @@ func GetCampaign(id uint) (*model.Campaign, error) { ...@@ -97,3 +77,39 @@ func GetCampaign(id uint) (*model.Campaign, error) {
log.Tracef("Retrieved: %v", campaign) log.Tracef("Retrieved: %v", campaign)
return campaign, nil return campaign, nil
} }
func PatchCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
existingCampaign, err := GetCampaign(id)
if existingCampaign == nil || err != nil {
return existingCampaign, err
}
if campaign.Name != "" {
existingCampaign.Name = campaign.Name
}
if campaign.OrganizerName != "" {
existingCampaign.OrganizerName = campaign.OrganizerName
}
if campaign.TargetAmount != 0 {
existingCampaign.TargetAmount = campaign.TargetAmount
}
if campaign.DonationMinimum != 0 {
existingCampaign.DonationMinimum = campaign.DonationMinimum
}
if campaign.Account.Name != "" {
existingCampaign.Account.Name = campaign.Account.Name
}
if campaign.Account.BankName != "" {
existingCampaign.Account.BankName = campaign.Account.BankName
}
if campaign.Account.Number != "" {
existingCampaign.Account.Number = campaign.Account.Number
}
result := db.DB.Save(existingCampaign)
if result.Error != nil {
return nil, result.Error
}
entry := log.WithField("ID", id)
entry.Info("Successfully patched campaign.")
entry.Tracef("Patched: %v", existingCampaign)
return existingCampaign, 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