【Go实战 | 电商平台】(6) 用户信息修改

简介: 文章目录写在前面1. 路由注册2. 函数编写2.1 service层2.2 api层3. 服务编写4. 验证

文章目录

写在前面

1. 路由注册

2. 函数编写

2.1 service层

2.2 api层

3. 服务编写

4. 验证

写在前面

由于用户的登录涉及到了身份这一方面的认证,所以我们就可以通过JWT进行用户的鉴权,以确认用户的身份。


1. 路由注册

编写用户更新的请求路由

authed.PUT("user", api.UserUpdate)


2. 函数编写

2.1 service层

定义一个用户修改的结构体

只能修改用户名或是昵称,修改密码后续再说。

//用户修改信息的服务
type UserUpdateService struct {
  NickName string `form:"nickname" json:"nickname" binding:"required,min=5,max=10"`
  UserName string `form:"user_name" json:"user_name" binding:"required,min=5,max=15"`
}


定义用户信息修改函数

func (service UserUpdateService) Update(id uint) serializer.Response {...}


2.2 api层

定义一个用户更新服务

var userUpdateService service.UserUpdateService


读取请求头中Authorization的值

claims,_ := util.ParseToken(c.GetHeader("Authorization"))


绑定这个服务

c.ShouldBind(&userUpdateService)


调用这个服务的update方法

res := userUpdateService.Update(claims.ID)


上下文返回

c.JSON(200, res)


api层完整代码

func UserUpdate(c *gin.Context) {
  var userUpdateService service.UserUpdateService
  claims,_ := util.ParseToken(c.GetHeader("Authorization"))
  if err := c.ShouldBind(&userUpdateService); err == nil {
  res := userUpdateService.Update(claims.ID)
  c.JSON(200, res)
  } else {
  c.JSON(200, ErrorResponse(err))
  logging.Info(err)
  }
}

3. 服务编写

根据Authorization解析出来的id找到该用户

var user model.User
  code := e.SUCCESS
  //找到用户
  err := model.DB.First(&user, id).Error
  if err != nil {
  logging.Info(err)
  code = e.ErrorDatabase
  return serializer.Response{
    Status: code,
    Msg:    e.GetMsg(code),
    Error:  err.Error(),
  }
  }

根据传送来的信息对用户的原本信息进行修改

user.Nickname = service.NickName
  user.UserName = service.UserName


保存到数据库中

err = model.DB.Save(&user).Error


返回用户的信息

return serializer.Response{
  Status: code,
  Data:   serializer.BuildUser(user),
  Msg:    e.GetMsg(code),
  }

服务层完整代码

func (service UserUpdateService) Update(id uint) serializer.Response {
  var user model.User
  code := e.SUCCESS
  //找到用户
  err := model.DB.First(&user, id).Error
  if err != nil {
  logging.Info(err)
  code = e.ErrorDatabase
  return serializer.Response{
    Status: code,
    Msg:    e.GetMsg(code),
    Error:  err.Error(),
  }
  }
  user.Nickname = service.NickName
  user.UserName = service.UserName
  err = model.DB.Save(&user).Error
  if err != nil {
  logging.Info(err)
  code = e.ErrorDatabase
  return serializer.Response{
    Status: code,
    Msg:    e.GetMsg(code),
    Error:  err.Error(),
  }
  }
  return serializer.Response{
  Status: code,
  Data:   serializer.BuildUser(user),
  Msg:    e.GetMsg(code),
  }
}

4. 验证

image.png


相关文章
|
5月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
5月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
6月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
6月前
|
缓存 NoSQL Redis
go-zero微服务实战系列(七、请求量这么高该如何优化)
go-zero微服务实战系列(七、请求量这么高该如何优化)
|
6月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
6月前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
6月前
|
消息中间件 缓存 监控
go-zero微服务实战系列(六、缓存一致性保证)
go-zero微服务实战系列(六、缓存一致性保证)
|
2月前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
95 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
4天前
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
52 20
|
2天前
|
存储 监控 算法
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。