diff --git a/internal/models/membership.go b/internal/models/membership.go index 1f093fe..8eaa4c5 100644 --- a/internal/models/membership.go +++ b/internal/models/membership.go @@ -7,7 +7,7 @@ type Membership struct { UpdatedAt time.Time StartDate time.Time `json:"start_date"` EndDate time.Time `json:"end_date"` - Status string `json:"status" validate:"safe_content"` + Status int8 `json:"status" validate:"safe_content"` SubscriptionModel SubscriptionModel `gorm:"foreignKey:SubscriptionModelID" json:"subscription_model"` SubscriptionModelID uint `json:"subsription_model_id"` ParentMembershipID uint `json:"parent_member_id" validate:"omitempty,omitnil,number"` diff --git a/internal/models/user.go b/internal/models/user.go index 8798325..8005ba7 100644 --- a/internal/models/user.go +++ b/internal/models/user.go @@ -1,7 +1,7 @@ package models import ( - "GoMembership/internal/constants" + "fmt" "time" "github.com/alexedwards/argon2id" @@ -9,36 +9,43 @@ import ( ) type User struct { - DateOfBirth time.Time `gorm:"not null" json:"date_of_birth" validate:"required,age"` - Company string `json:"company" validate:"omitempty,omitnil,safe_content"` - Phone string `json:"phone" validate:"omitempty,omitnil,safe_content"` - Notes *string `json:"notes,safe_content"` - FirstName string `gorm:"not null" json:"first_name" validate:"required,safe_content"` - Password string `json:"password" validate:"required_unless=RoleID 0,safe_content"` - Email string `gorm:"unique;not null" json:"email" validate:"required,email,safe_content"` - LastName string `gorm:"not null" json:"last_name" validate:"required,safe_content"` - ProfilePicture string `json:"profile_picture" validate:"omitempty,omitnil,image,safe_content"` - Address string `gorm:"not null" json:"address" validate:"required,safe_content"` - ZipCode string `gorm:"not null" json:"zip_code" validate:"required,alphanum,safe_content"` - City string `form:"not null" json:"city" validate:"required,alphaunicode,safe_content"` - Consents []Consent `gorm:"constraint:OnUpdate:CASCADE"` - BankAccount BankAccount `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bank_account"` - Verification Verification `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"` - Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"` - ID int64 `gorm:"primaryKey" json:"id"` - PaymentStatus int8 `json:"payment_status"` - Status int8 `json:"status"` - RoleID int8 `json:"role_id"` gorm.Model + DateOfBirth time.Time `gorm:"not null" json:"date_of_birth" validate:"required,age"` + Company string `json:"company" validate:"omitempty,omitnil,safe_content"` + Phone string `json:"phone" validate:"omitempty,omitnil,safe_content"` + Notes string `json:"notes" validate:"safe_content"` + FirstName string `gorm:"not null" json:"first_name" validate:"required,safe_content"` + Password string `json:"password" validate:"required_unless=RoleID 0,safe_content"` + Email string `gorm:"unique;not null" json:"email" validate:"required,email,safe_content"` + LastName string `gorm:"not null" json:"last_name" validate:"required,safe_content"` + ProfilePicture string `json:"profile_picture" validate:"omitempty,omitnil,image,safe_content"` + Address string `gorm:"not null" json:"address" validate:"required,safe_content"` + ZipCode string `gorm:"not null" json:"zip_code" validate:"required,alphanum,safe_content"` + City string `form:"not null" json:"city" validate:"required,alphaunicode,safe_content"` + Consents []Consent `gorm:"constraint:OnUpdate:CASCADE"` + BankAccount BankAccount `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bank_account"` + BankAccountID uint + Verification Verification `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"` + VerificationID uint + Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"` + MembershipID uint + ID uint `json:"id"` + PaymentStatus int8 `json:"payment_status"` + Status int8 `json:"status"` + RoleID int8 `json:"role_id"` } -// BeforeCreate sets the default value for Status -func (u *User) BeforeCreate(tx *gorm.DB) (err error) { - if u.Status == 0 { // Assuming 0 is an unset value - u.Status = constants.UnverifiedStatus - u.PaymentStatus = constants.AwaitingPaymentStatus +func (u *User) AfterCreate(tx *gorm.DB) (err error) { + if u.BankAccount.ID != 0 && u.BankAccount.MandateReference == "" { + mandateReference := u.GenerateMandateReference() + + return tx.Model(&u.BankAccount).Update("MandateReference", mandateReference).Error } - return + return nil +} + +func (u *User) GenerateMandateReference() string { + return fmt.Sprintf("%s%d%s", time.Now().Format("20060102"), u.ID, u.BankAccount.IBAN) } func (u *User) PasswordMatches(plaintextPassword string) (bool, error) {