package model import ( "time" "gorm.io/gorm" ) // User 用户表 type User struct { gorm.Model Phone string `gorm:"uniqueIndex;size:20" json:"phone"` Email string `gorm:"uniqueIndex;size:100" json:"email"` PasswordHash string `gorm:"size:255" json:"-"` Nickname string `gorm:"size:50" json:"nickname"` Avatar string `gorm:"size:255" json:"avatar"` SurveyCompleted bool `gorm:"default:false" json:"survey_completed"` // 会员相关字段 MemberLevel string `gorm:"size:20;default:normal" json:"member_level"` // normal/silver/gold/diamond TotalSpent float64 `gorm:"default:0" json:"total_spent"` // 累计消费金额 Points int `gorm:"default:0" json:"points"` // 当前积分 MemberSince *time.Time `json:"member_since"` // 首次消费时间 } // 会员等级常量 const ( MemberLevelNormal = "normal" // 普通用户 MemberLevelSilver = "silver" // 银卡会员 MemberLevelGold = "gold" // 金卡会员 MemberLevelDiamond = "diamond" // 钻石会员 ) // MemberLevelConfig 会员等级配置 type MemberLevelConfig struct { Level string // 等级标识 Name string // 等级名称 MinSpent float64 // 升级所需累计消费 Discount float64 // 折扣率 (0.92-1.0) PointsMultiplier float64 // 积分倍率 FreeShippingMin float64 // 包邮门槛 } // MemberLevelConfigs 会员等级配置表 var MemberLevelConfigs = map[string]MemberLevelConfig{ MemberLevelNormal: { Level: MemberLevelNormal, Name: "普通用户", MinSpent: 0, Discount: 1.0, PointsMultiplier: 1.0, FreeShippingMin: 99, }, MemberLevelSilver: { Level: MemberLevelSilver, Name: "银卡会员", MinSpent: 500, Discount: 0.98, PointsMultiplier: 1.2, FreeShippingMin: 69, }, MemberLevelGold: { Level: MemberLevelGold, Name: "金卡会员", MinSpent: 2000, Discount: 0.95, PointsMultiplier: 1.5, FreeShippingMin: 49, }, MemberLevelDiamond: { Level: MemberLevelDiamond, Name: "钻石会员", MinSpent: 5000, Discount: 0.92, PointsMultiplier: 2.0, FreeShippingMin: 0, // 全场包邮 }, } // GetMemberLevelBySpent 根据累计消费获取会员等级 func GetMemberLevelBySpent(totalSpent float64) string { if totalSpent >= 5000 { return MemberLevelDiamond } else if totalSpent >= 2000 { return MemberLevelGold } else if totalSpent >= 500 { return MemberLevelSilver } return MemberLevelNormal } // HealthProfile 健康档案 type HealthProfile struct { gorm.Model UserID uint `gorm:"uniqueIndex" json:"user_id"` Name string `gorm:"size:50" json:"name"` BirthDate *time.Time `json:"birth_date"` Gender string `gorm:"size:10" json:"gender"` // male, female Height float64 `json:"height"` // cm Weight float64 `json:"weight"` // kg BMI float64 `json:"bmi"` BloodType string `gorm:"size:10" json:"blood_type"` // A, B, AB, O Occupation string `gorm:"size:50" json:"occupation"` MaritalStatus string `gorm:"size:20" json:"marital_status"` // single, married, divorced Region string `gorm:"size:100" json:"region"` } // LifestyleInfo 生活习惯 type LifestyleInfo struct { gorm.Model UserID uint `gorm:"uniqueIndex" json:"user_id"` SleepTime string `gorm:"size:10" json:"sleep_time"` // HH:MM WakeTime string `gorm:"size:10" json:"wake_time"` // HH:MM SleepQuality string `gorm:"size:20" json:"sleep_quality"` // good, normal, poor MealRegularity string `gorm:"size:20" json:"meal_regularity"` // regular, irregular DietPreference string `gorm:"size:50" json:"diet_preference"` // 偏好 DailyWaterML int `json:"daily_water_ml"` // 每日饮水量 ml ExerciseFrequency string `gorm:"size:20" json:"exercise_frequency"` // never, sometimes, often, daily ExerciseType string `gorm:"size:100" json:"exercise_type"` ExerciseDurationMin int `json:"exercise_duration_min"` // 每次运动时长 IsSmoker bool `json:"is_smoker"` AlcoholFrequency string `gorm:"size:20" json:"alcohol_frequency"` // never, sometimes, often } // TableName 指定表名 func (User) TableName() string { return "users" } func (HealthProfile) TableName() string { return "health_profiles" } func (LifestyleInfo) TableName() string { return "lifestyle_infos" }