From 43e9aa477601f7af1344ba4d3f9695c70f2975e4 Mon Sep 17 00:00:00 2001 From: mayiming <1627832236@qq.com> Date: Mon, 29 Sep 2025 02:19:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=A8=E6=88=B7=E4=BF=AE?= =?UTF-8?q?=E6=94=B9setting=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controllers/user/setting/userSetting.go | 100 ++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 controllers/user/setting/userSetting.go diff --git a/controllers/user/setting/userSetting.go b/controllers/user/setting/userSetting.go new file mode 100644 index 0000000..9f5c161 --- /dev/null +++ b/controllers/user/setting/userSetting.go @@ -0,0 +1,100 @@ +package setting + +import ( + "errors" + "net/http" + "toutoukan/init/databaseInit" + + "github.com/gin-gonic/gin" +) + +type UserSettingUpdateReq struct { + UID string `json:"uid" binding:"required"` // 用户ID,必填 + Password string `json:"password"` // 密码,可选 + AvatarURL string `json:"avatar_url"` // 头像URL,可选 + Gender int `json:"gender"` // 性别,可选 + BirthdateDate string `json:"birthdate_date"` // 生日,可选 + Bio string `json:"bio"` // 个人简介,可选 + Username string `json:"username"` // 用户名,可选 +} + +// 自定义验证函数,确保除uid外至少有一个字段有值 +func (u *UserSettingUpdateReq) Validate() error { + if u.Password == "" && u.AvatarURL == "" && u.Gender == 0 && u.BirthdateDate == "" && u.Bio == "" && u.Username == "" { + return ErrAtLeastOneFieldRequired + } + return nil +} + +// 定义错误变量 +var ErrAtLeastOneFieldRequired = errors.New("at least one field (password, avatar_url, gender, birthdate_date, bio, username) is required") + +type User struct { + UID string `gorm:"column:uid;type:varchar(40);primaryKey"` + Telephone string `gorm:"column:telephone;type:varchar(255)"` + Password string `gorm:"column:password;type:varchar(30)"` + AvatarURL string `gorm:"column:avatar_url;type:varchar(255);default:'https://默认头像地址'"` + Gender int `gorm:"column:gender;type:int"` + BirthdateDate string `gorm:"column:birthdate_date;type:datetime"` + CreateTime string `gorm:"column:createtime;type:datetime"` + UpdateTime string `gorm:"column:updatetime;type:datetime"` + Bio string `gorm:"column:bio;type:varchar(255)"` + Username string `gorm:"column:username;type:varchar(30)"` + TotalPoints int `gorm:"column:total_points;type:int;default:0"` +} + +// TableName 指定表名 +func (User) TableName() string { + return "user_info" +} + +// ChangeUserSetting +func ChangeUserSetting(c *gin.Context) { + // 1. 绑定请求体到结构体 + var req UserSettingUpdateReq + if err := c.ShouldBindJSON(&req); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + // 2. 自定义验证:确保至少有一个字段有值 + if err := req.Validate(); err != nil { + c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) + return + } + + // 3. 准备要更新的数据 + var updateData User + if req.Password != "" { + updateData.Password = req.Password + } + if req.AvatarURL != "" { + updateData.AvatarURL = req.AvatarURL + } + if req.Gender != 0 { + updateData.Gender = req.Gender + } + if req.BirthdateDate != "" { + updateData.BirthdateDate = req.BirthdateDate + } + if req.Bio != "" { + updateData.Bio = req.Bio + } + if req.Username != "" { + updateData.Username = req.Username + } + + // 4. 执行数据库更新 + result := databaseInit.UserDB.Model(&User{}).Where("uid = ?", req.UID).Updates(updateData) + if result.Error != nil { + c.JSON(http.StatusInternalServerError, gin.H{"error": result.Error.Error()}) + return + } + if result.RowsAffected == 0 { + c.JSON(http.StatusNotFound, gin.H{"error": "user not found"}) + return + } + + // 5. 返回成功响应 + c.JSON(http.StatusOK, gin.H{"message": "user setting updated successfully", "success": true}) +}