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

Implemented remaining service functions using database

parent 98d92f96
No related branches found
No related tags found
No related merge requests found
package service package service
import ( import (
"fmt" "errors"
log "github.com/sirupsen/logrus" 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/db"
"gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model" "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 { func CreateCampaign(campaign *model.Campaign) error {
result := db.DB.Create(campaign) result := db.DB.Create(campaign)
if result.Error != nil { if result.Error != nil {
...@@ -39,9 +31,13 @@ func GetCampaigns() ([]model.Campaign, error) { ...@@ -39,9 +31,13 @@ func GetCampaigns() ([]model.Campaign, error) {
} }
func GetCampaign(id uint) (*model.Campaign, error) { func GetCampaign(id uint) (*model.Campaign, error) {
campaign := campaignStore[id] campaign := new(model.Campaign)
if campaign == nil { result := db.DB.Preload("Donations").First(campaign, id)
return nil, fmt.Errorf("no campaign with ID %d", id) if errors.Is(result.Error, gorm.ErrRecordNotFound) {
return nil, nil
}
if result.Error != nil {
return nil, result.Error
} }
log.Tracef("Retrieved: %v", campaign) log.Tracef("Retrieved: %v", campaign)
return campaign, nil return campaign, nil
...@@ -49,25 +45,33 @@ func GetCampaign(id uint) (*model.Campaign, error) { ...@@ -49,25 +45,33 @@ func GetCampaign(id uint) (*model.Campaign, error) {
func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) { func UpdateCampaign(id uint, campaign *model.Campaign) (*model.Campaign, error) {
existingCampaign, err := GetCampaign(id) existingCampaign, err := GetCampaign(id)
if err != nil { if existingCampaign == nil || err != nil {
return existingCampaign, err return existingCampaign, err
} }
existingCampaign.Name = campaign.Name existingCampaign.Name = campaign.Name
existingCampaign.OrganizerName = campaign.OrganizerName existingCampaign.OrganizerName = campaign.OrganizerName
existingCampaign.TargetAmount = campaign.TargetAmount existingCampaign.TargetAmount = campaign.TargetAmount
existingCampaign.DonationMinimum = campaign.DonationMinimum 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 := log.WithField("ID", id)
entry.Info("Successfully updated campaign.") entry.Info("Successfully updated campaign.")
entry.Tracef("Updated: %v", campaign) entry.Tracef("Updated: %v", existingCampaign)
return existingCampaign, nil 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 err != nil { if campaign == nil || err != nil {
return campaign, err 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 := log.WithField("ID", id)
entry.Info("Successfully deleted campaign.") entry.Info("Successfully deleted campaign.")
entry.Tracef("Deleted: %v", campaign) entry.Tracef("Deleted: %v", campaign)
......
...@@ -3,17 +3,18 @@ package service ...@@ -3,17 +3,18 @@ package service
import ( import (
log "github.com/sirupsen/logrus" 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" "gitlab.reutlingen-university.de/go-exercises/myaktion-go/src/myaktion/model"
) )
func AddDonation(campaignId uint, donation *model.Donation) error { func AddDonation(campaignId uint, donation *model.Donation) error {
campaign, err := GetCampaign(campaignId) donation.CampaignID = campaignId
if err != nil { result := db.DB.Create(donation)
return err if result.Error != nil {
return result.Error
} }
campaign.Donations = append(campaign.Donations, *donation)
entry := log.WithField("ID", campaignId) 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) entry.Tracef("Stored: %v", donation)
return nil 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