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
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)
......
......@@ -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
}
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