membership status now int; add auto SEPA mandateref upon user creation

This commit is contained in:
Alex
2024-09-29 21:12:49 +02:00
parent 31cfe21695
commit 33561692b6
2 changed files with 35 additions and 28 deletions

View File

@@ -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"`

View File

@@ -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,10 +9,11 @@ import (
) )
type User struct { type User struct {
gorm.Model
DateOfBirth time.Time `gorm:"not null" json:"date_of_birth" validate:"required,age"` DateOfBirth time.Time `gorm:"not null" json:"date_of_birth" validate:"required,age"`
Company string `json:"company" validate:"omitempty,omitnil,safe_content"` Company string `json:"company" validate:"omitempty,omitnil,safe_content"`
Phone string `json:"phone" validate:"omitempty,omitnil,safe_content"` Phone string `json:"phone" validate:"omitempty,omitnil,safe_content"`
Notes *string `json:"notes,safe_content"` Notes string `json:"notes" validate:"safe_content"`
FirstName string `gorm:"not null" json:"first_name" validate:"required,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"` Password string `json:"password" validate:"required_unless=RoleID 0,safe_content"`
Email string `gorm:"unique;not null" json:"email" validate:"required,email,safe_content"` Email string `gorm:"unique;not null" json:"email" validate:"required,email,safe_content"`
@@ -23,22 +24,28 @@ type User struct {
City string `form:"not null" json:"city" validate:"required,alphaunicode,safe_content"` City string `form:"not null" json:"city" validate:"required,alphaunicode,safe_content"`
Consents []Consent `gorm:"constraint:OnUpdate:CASCADE"` Consents []Consent `gorm:"constraint:OnUpdate:CASCADE"`
BankAccount BankAccount `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bank_account"` BankAccount BankAccount `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"bank_account"`
BankAccountID uint
Verification Verification `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"` Verification Verification `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
VerificationID uint
Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"` Membership Membership `gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"membership"`
ID int64 `gorm:"primaryKey" json:"id"` MembershipID uint
ID uint `json:"id"`
PaymentStatus int8 `json:"payment_status"` PaymentStatus int8 `json:"payment_status"`
Status int8 `json:"status"` Status int8 `json:"status"`
RoleID int8 `json:"role_id"` RoleID int8 `json:"role_id"`
gorm.Model
} }
// 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) {