From ce0acf12f08682c263abe3c17e2775abac6dd298 Mon Sep 17 00:00:00 2001
From: Martin Schmollinger <martin.schmollinger@reutlingen-university.de>
Date: Sun, 7 May 2023 19:17:56 +0200
Subject: [PATCH] Added gorm and defined orm for domain model

---
 src/myaktion/go.mod            |  9 ++++++++-
 src/myaktion/go.sum            | 12 ++++++++++++
 src/myaktion/model/account.go  |  6 +++---
 src/myaktion/model/campaign.go | 18 ++++++++++--------
 src/myaktion/model/donation.go | 14 +++++++++-----
 5 files changed, 42 insertions(+), 17 deletions(-)

diff --git a/src/myaktion/go.mod b/src/myaktion/go.mod
index 8c6a401..534b387 100644
--- a/src/myaktion/go.mod
+++ b/src/myaktion/go.mod
@@ -7,4 +7,11 @@ require (
 	github.com/sirupsen/logrus v1.9.0
 )
 
-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
+	gorm.io/driver/mysql v1.5.0 // indirect
+	gorm.io/gorm v1.25.0 // indirect
+)
diff --git a/src/myaktion/go.sum b/src/myaktion/go.sum
index 656e662..023fad4 100644
--- a/src/myaktion/go.sum
+++ b/src/myaktion/go.sum
@@ -1,8 +1,15 @@
 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.0 h1:+KtYtb2roDz14EQe4bla8CbQlmb9dN3VejSai3lprfU=
+gorm.io/gorm v1.25.0/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
diff --git a/src/myaktion/model/account.go b/src/myaktion/model/account.go
index d2e74b4..e0e927a 100644
--- a/src/myaktion/model/account.go
+++ b/src/myaktion/model/account.go
@@ -1,7 +1,7 @@
 package model
 
 type Account struct {
-	Name     string
-	BankName string
-	Number   string
+	Name     string `gorm:"notNull;size:60"`
+	BankName string `gorm:"notNull;size:40"`
+	Number   string `gorm:"notNull;size:20"`
 }
diff --git a/src/myaktion/model/campaign.go b/src/myaktion/model/campaign.go
index 9fb5819..2aade1c 100644
--- a/src/myaktion/model/campaign.go
+++ b/src/myaktion/model/campaign.go
@@ -1,12 +1,14 @@
 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_"`
 }
diff --git a/src/myaktion/model/donation.go b/src/myaktion/model/donation.go
index 4bf6af1..fffdfce 100644
--- a/src/myaktion/model/donation.go
+++ b/src/myaktion/model/donation.go
@@ -1,5 +1,7 @@
 package model
 
+import "gorm.io/gorm"
+
 type Status string
 
 const (
@@ -8,9 +10,11 @@ const (
 )
 
 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"`
+	Status           Status  `gorm:"notNull;type:ENUM('TRANSFERRED', 'IN_PROCESS')"`
+	Account          Account `gorm:"embedded;embeddedPrefix:account_"`
 }
-- 
GitLab