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

CreateCampaign und Campaigns bzgl DB umgeschrieben

parent f76cba5d
No related branches found
No related tags found
1 merge request!3Master
......@@ -5,6 +5,13 @@ go 1.20
require (
github.com/gorilla/mux v1.8.0
github.com/sirupsen/logrus v1.9.0
gorm.io/driver/mysql v1.5.0
gorm.io/gorm v1.25.1
)
require golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
require (
github.com/go-sql-driver/mysql v1.7.1 // indirect
github.com/jinzhu/inflection v1.0.0 // indirect
github.com/jinzhu/now v1.1.5 // indirect
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8 // indirect
)
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0=
......@@ -15,3 +22,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gorm.io/driver/mysql v1.5.0 h1:6hSAT5QcyIaty0jfnff0z0CLDjyRgZ8mlMHLqSt7uXM=
gorm.io/driver/mysql v1.5.0/go.mod h1:FFla/fJuCvyTi7rJQd27qlNX2v3L6deTR1GgTjSOLPo=
gorm.io/gorm v1.24.7-0.20230306060331-85eaf9eeda11/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
gorm.io/gorm v1.25.1 h1:nsSALe5Pr+cM3V1qwwQ7rOkw+6UeLrX5O4v3llhHa64=
gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
#!/usr/bin/env bash
docker run -d -p 3306:3306 --name database -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=myaktion mariadb:10.5
\ No newline at end of file
#!/usr/bin/env bash
docker kill database && docker rm database
\ No newline at end of file
package db
import (
"fmt"
"os"
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var DB *gorm.DB
func init() {
dsn := fmt.Sprintf("root:root@tcp(%s)/myaktion?charset=utf8&parseTime=True&loc=Local", os.Getenv("DB_CONNECT"))
log.Info("UsingDSN forDB:", dsn)
var err error
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic("Connection to Database failed")
}
log.Info("Starting migrations")
if err := DB.Debug().AutoMigrate(&model.Campaign{}); err != nil {
panic(err)
}
if err := DB.Debug().AutoMigrate(&model.Donation{}); err != nil {
panic(err)
}
log.Info("Migration finished")
}
package model
type Account struct {
Name string
BankName string
Number string
Name string `gorm:"notNull:seize:40"`
BankName string `gorm:"notNull:seize:20"`
Number string `gorm:"notNull:seize:10"`
}
package model
import "gorm.io/gorm"
type Campaign struct {
ID uint
Name string
OrganizerName string
TargetAmount float64
DonationMinimum float64
AmountDonatedSoFar float64
Donations []Donation
Account Account
gorm.Model
Name string `gorm:"notNull;size:30"`
OrganizerName string `gorm:"notNull"`
TargetAmount float64 `gorm:"notNull;check:target_amount>= 10.0"`
DonationMinimum float64 `gorm:"notNull;check:donation_minimum>= 1.0"`
Donations []Donation `gorm:"foreignKey:CampaignID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE"`
AmountDonatedSoFar float64 `gorm:"-"`
Account Account `gorm:"embedded;embeddedPrefix:account_"`
}
package model
import "gorm.io/gorm"
type Donation struct {
Amount float64
DonorName string
ReceiptRequested bool
Account Account
Status Status
gorm.Model
CampaignID uint
Amount float64 `gorm:"notNull;check:amount >= 1.0"`
DonorName string `gorm:"notNull;size:40"`
ReceiptRequested bool `gorm:"notNull"`
Account Account `gorm:"embedded;embeddedPrefix:account_"`
Status Status `gorm:"notNull;type:ENUM('TRANSFERRED','IN_PROCESS')"`
}
type Status string
const (
Transferred Status = "Transferred"
In_Process Status = "In_Process"
Transferred Status = "TRANSFERRED"
In_Process Status = "IN_PROCESS"
)
......@@ -5,6 +5,7 @@ import (
log "github.com/sirupsen/logrus"
"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/db"
"gitlab.reutlingen-university.de/albrecht/myaktion-go/src/myaktion/model"
)
......@@ -18,9 +19,10 @@ func init() {
}
func CreateCampaign(campaign *model.Campaign) error {
campaign.ID = actCampaignId
campaignStore[actCampaignId] = campaign
actCampaignId += 1
result := db.DB.Create(campaign)
if result.Error != nil {
return result.Error
}
log.Printf("Successfully stored new campaign with ID %v in database.", campaign.ID)
log.Printf("Stored: %v", campaign)
return nil
......@@ -28,9 +30,12 @@ func CreateCampaign(campaign *model.Campaign) error {
func GetCampaigns() ([]model.Campaign, error) {
var campaigns []model.Campaign
for _, campaign := range campaignStore {
campaigns = append(campaigns, *campaign)
result := db.DB.Preload("Donations").Find(&campaigns)
if result.Error != nil {
return nil, result.Error
}
log.Tracef("Retrieved: %v Campaigns", campaigns)
return campaigns, nil
}
......
# Add Campaign
curl -H "Content-Type: application/json" -d '{"name":"Covid","organizerName":"Martin","donationMinimum":2,"targetAmount":100,"account":{"name":"Martin","bankName":"DKB","number":"123456"}}' localhost:8000/campaign
# Get (all) campaigns
curl localhost:8000/campaigns
# Get (specified) campaign
curl localhost:8000/campaigns/2
# DeleteCampaign
curl -X DELETE localhost:8000/campaigns/1
# UpdateCampaign
curl -X PUT -H "Content-Type: application/json" -d '{"name":"new Name","organizerName":"Thomas","donationMinimum":2,"targetAmount":100,"account":{"name":"Martin","bankName":"DKB","number":"123456"}}' localhost:8000/campaigns/1
# AddDonation
curs -H "Content-Type: application/json" -d '{"amount": 12.23,"DonorName":"Stefan","ReceiptRequested":false}'
\ No newline at end of file
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