59 lines
1.6 KiB
Go
59 lines
1.6 KiB
Go
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"`
|
|
SubscriptionModel SubscriptionModel `gorm:"foreignKey:SubscriptionModelID" json:"subscription_model"`
|
|
SubscriptionModelID uint `json:"subsription_model_id"`
|
|
ParentMembershipID uint `json:"parent_member_id" binding:"omitempty,omitnil,number"`
|
|
}
|
|
|
|
func (m *Membership) BeforeSave(tx *gorm.DB) error {
|
|
m.SubscriptionModelID = m.SubscriptionModel.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("SubscriptionModel").First(m, m.ID).Error // Refresh the user object with SubscriptionModel
|
|
}
|
|
|
|
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
|
|
}
|