diff --git a/src/myaktion/service/campaign.go b/src/myaktion/service/campaign.go index 6205e87afc7b0f73b52d0fc9f7f1ab8e7571199e..f743696c15818c709b3d53910f3e11bd4935a3f7 100644 --- a/src/myaktion/service/campaign.go +++ b/src/myaktion/service/campaign.go @@ -1,23 +1,15 @@ package service import ( - "fmt" + "errors" log "github.com/sirupsen/logrus" + "gorm.io/gorm" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/db" "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 { result := db.DB.Create(campaign) if result.Error != nil { @@ -39,9 +31,13 @@ func GetCampaigns() ([]model.Campaign, error) { } func GetCampaign(id uint) (*model.Campaign, error) { - campaign := campaignStore[id] - if campaign == nil { - return nil, fmt.Errorf("no campaign with ID %d", id) + campaign := new(model.Campaign) + result := db.DB.Preload("Donations").First(campaign, id) + if errors.Is(result.Error, gorm.ErrRecordNotFound) { + return nil, nil + } + if result.Error != nil { + return nil, result.Error } log.Tracef("Retrieved: %v", campaign) return campaign, nil @@ -49,25 +45,33 @@ func GetCampaign(id uint) (*model.Campaign, error) { func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) { existingCampaign, err := GetCampaign(id) - if err != nil { + 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", campaign) + entry.Tracef("Updated: %v", existingCampaign) return existingCampaign, nil } func DeleteCampaign(id uint) (*model.Campaign, error) { campaign, err := GetCampaign(id) - if err != nil { + if campaign == nil || err != nil { return campaign, err } - delete(campaignStore, id) + result := db.DB.Delete(campaign) + if result.Error != nil { + return nil, result.Error + } entry := log.WithField("ID", id) entry.Info("Successfully deleted campaign.") entry.Tracef("Deleted: %v", campaign) diff --git a/src/myaktion/service/donation.go b/src/myaktion/service/donation.go index ccd22a6b8b7ae2488f2602e2f05a70d0bd23afda..6f3c26e704d8647d4a76d61500914618e7d4e89e 100644 --- a/src/myaktion/service/donation.go +++ b/src/myaktion/service/donation.go @@ -3,17 +3,18 @@ package service import ( log "github.com/sirupsen/logrus" + "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/db" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model" ) func AddDonation(campaignId uint, donation *model.Donation) error { - campaign, err := GetCampaign(campaignId) - if err != nil { - return err + donation.CampaignID = campaignId + result := db.DB.Create(donation) + if result.Error != nil { + return result.Error } - campaign.Donations = append(campaign.Donations, *donation) entry := log.WithField("ID", campaignId) - entry.Info("Successfully added new donation to campaign.") + entry.Info("Successfully added new donation to campaign in database.") entry.Tracef("Stored: %v", donation) return nil }