// 小程序用户接口 package app import ( "simple-memo/global" "simple-memo/models" "simple-memo/utils" "github.com/gin-gonic/gin" "gorm.io/gorm" ) // -------------------------- 1. 定义 Handler 接口 -------------------------- // UserConfigHandler 用户模块接口定义 type UserConfigHandler interface { UserConfigInfo(c *gin.Context) // 获取配置 EditUserConfig(c *gin.Context) // 编辑配置 } // -------------------------- 2. 实现结构体(依赖注入DB) -------------------------- // userHandler 接口实现结构体 type userConfigHandler struct { db *gorm.DB // 注入数据库,方便测试 } // NewUserConfigHandler 创建用户处理器(对外暴露) func NewUserConfigHandler() UserConfigHandler { return &userConfigHandler{ db: global.DB, } } type EditUserConfigReq struct { Theme string `json:"theme"` // 主题 } // -------------------------- 4. 接口实现 -------------------------- // UserConfigInfo 获取用户配置信息 func (h *userConfigHandler) UserConfigInfo(c *gin.Context) { userId, exists := c.Get("userID") if !exists { utils.Fail(c, "用户未登录") return } var user models.UserConfig err := h.db.Where("user_id = ?", userId).First(&user).Error if err != nil { utils.Fail(c, "获取用户信息失败") return } // 返回脱敏用户信息 utils.Ok(c, gin.H{ "id": user.ID, "theme": user.Theme, "createdAt": user.CreatedAt, }) } // EditUser 修改用户信息 func (h *userConfigHandler) EditUserConfig(c *gin.Context) { userId, exists := c.Get("userID") if !exists { utils.Fail(c, "用户未登录") } var editUserConfigReq EditUserConfigReq if err := c.ShouldBindJSON(&editUserConfigReq); err != nil { utils.Fail(c, "参数解析失败") } var data map[string]any // 如果只存在一个字段,则只更新当前的一个 if editUserConfigReq.Theme != "" { data = map[string]any{ "user_id": userId, "theme": editUserConfigReq.Theme, } } if data == nil { utils.Ok(c, nil) } err := h.db.Where("user_id = ?", userId). Assign(data). FirstOrCreate(&models.UserConfig{}).Error if err != nil { utils.Fail(c, "用户配置信息更新失败") } utils.Ok(c, nil) }