Files
toutoukan/controllers/user/setting/userSetting.go

101 lines
3.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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})
}