membership status now int; add auto SEPA mandateref upon user creation
This commit is contained in:
@@ -7,7 +7,7 @@ type Membership struct {
|
|||||||
UpdatedAt time.Time
|
UpdatedAt time.Time
|
||||||
StartDate time.Time `json:"start_date"`
|
StartDate time.Time `json:"start_date"`
|
||||||
EndDate time.Time `json:"end_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"`
|
SubscriptionModel SubscriptionModel `gorm:"foreignKey:SubscriptionModelID" json:"subscription_model"`
|
||||||
SubscriptionModelID uint `json:"subsription_model_id"`
|
SubscriptionModelID uint `json:"subsription_model_id"`
|
||||||
ParentMembershipID uint `json:"parent_member_id" validate:"omitempty,omitnil,number"`
|
ParentMembershipID uint `json:"parent_member_id" validate:"omitempty,omitnil,number"`
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"GoMembership/internal/constants"
|
"fmt"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/alexedwards/argon2id"
|
"github.com/alexedwards/argon2id"
|
||||||
@@ -9,36 +9,43 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type User struct {
|
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
|
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) AfterCreate(tx *gorm.DB) (err error) {
|
||||||
func (u *User) BeforeCreate(tx *gorm.DB) (err error) {
|
if u.BankAccount.ID != 0 && u.BankAccount.MandateReference == "" {
|
||||||
if u.Status == 0 { // Assuming 0 is an unset value
|
mandateReference := u.GenerateMandateReference()
|
||||||
u.Status = constants.UnverifiedStatus
|
|
||||||
u.PaymentStatus = constants.AwaitingPaymentStatus
|
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) {
|
func (u *User) PasswordMatches(plaintextPassword string) (bool, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user