package models import ( "GoMembership/pkg/logger" "time" "gorm.io/gorm" ) type Membership struct { ID uint `gorm:"primaryKey" json:"id"` UserID uint `gorm:"index" json:"user_id"` CreatedAt time.Time UpdatedAt time.Time StartDate time.Time `json:"start_date"` EndDate time.Time `json:"end_date"` Status int8 `json:"status" binding:"number,safe_content"` Subscription Subscription `gorm:"foreignKey:SubscriptionID" json:"subscription"` SubscriptionID uint `json:"subscription_id"` ParentMembershipID uint `json:"parent_member_id" binding:"omitempty,omitnil,number"` } func (m *Membership) BeforeSave(tx *gorm.DB) error { m.SubscriptionID = m.Subscription.ID return nil } func (m *Membership) Create(db *gorm.DB) error { if err := db.Create(m).Error; err != nil { return err } logger.Info.Printf("Membership created: %#v", m) return db.Preload("Subscription").First(m, m.ID).Error // Refresh the user object with Subscription } func (m *Membership) Update(db *gorm.DB) error { return db.Transaction(func(tx *gorm.DB) error { // Check if the user exists in the database var existingMembership Membership logger.Info.Printf("updating Membership: %#v", m) if err := tx.First(&existingMembership, m.ID).Error; err != nil { return err } if err := tx.Model(&existingMembership).Updates(m).Error; err != nil { return err } return tx.First(m, m.ID).Error }) } func (m *Membership) Delete(db *gorm.DB) error { return db.Delete(&m).Error }