【Go实战 | 电商平台】(8) 创建商品

简介: 文章目录写在前面1. 创建商品1.1 路由接口注册1.2 接口函数编写1.2.1 service层1.2.2 api层1.3 服务函数编写1.4 验证服务

文章目录

写在前面

1. 创建商品

1.1 路由接口注册

1.2 接口函数编写

1.2.1 service层

1.2.2 api层

1.3 服务函数编写

1.4 验证服务

写在前面

与前一章一样,我们这个步骤也是需要jwt鉴权的,因为你要知道是谁创建了商品,所以我们要在请求头上加上 token 连同 data 的信息一起传来创建商品


1. 创建商品

1.1 路由接口注册

post 请求

authed.POST("product", api.CreateProduct)


1.2 接口函数编写

1.2.1 service层

定义一个创建商品的服务结构体

type CreateProductService struct {
  Name          string `form:"name" json:"name"`
  CategoryID    int    `form:"category_id" json:"category_id"`
  Title         string `form:"title" json:"title" bind:"required,min=2,max=100"`
  Info          string `form:"info" json:"info" bind:"max=1000"`
  ImgPath       string `form:"img_path" json:"img_path"`
  Price         string `form:"price" json:"price"`
  DiscountPrice string `form:"discount_price" json:"discount_price"`
}

定义一个创建商品的create方法

传入进来的有id是上传者的id,file和fileSize 是上传的商品图片以及其图片大小。

func (service *CreateProductService)Create(id uint,file multipart.File,fileSize int64) serializer.Response {
  ...
}

1.2.2 api层

定义创建商品的对象

createProductService := service.CreateProductService{}


获取token,并解析当前对象的id

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


获取传送过来的文件

file , fileHeader ,_ := c.Request.FormFile("file")


绑定上下文数据

c.ShouldBind(&createProductService)


执行创建对象下的create()方法,传入用户的id,文件以及文件大小等

res := createProductService.Create(claim.ID,file,fileSize)

1.3 服务函数编写

编写创建商品的服务函数


验证用户

var boss model.User
  model.DB.Model(&model.User{}).First(&boss,id)


上传图片到七牛云

status , info := util.UploadToQiNiu(file,fileSize)
  if status != 200 {
  return serializer.Response{
    Status:  status  ,
    Data:      e.GetMsg(status),
    Error:info,
  }
  }


获取分类

model.DB.Model(&model.Category{}).First(&category,service.CategoryID)

1

构建商品对象

product := model.Product{
  Name:          service.Name,
  Category:     category,
  CategoryID:    uint(service.CategoryID),
  Title:         service.Title,
  Info:          service.Info,
  ImgPath:       info,
  Price:         service.Price,
  DiscountPrice: service.DiscountPrice,
  BossID:        int(id),
  BossName:      boss.UserName,
  BossAvatar:    boss.Avatar,
  }


在数据库中创建

err := model.DB.Create(&product).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.BuildProduct(product),
  Msg:    e.GetMsg(code),
  }

1.4 验证服务

发送请求

image.png


请求响应

image.png


相关文章
|
4月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
4月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
5月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
5月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
5月前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
27天前
|
存储 监控 算法
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
76 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
1月前
|
存储 Go 索引
go语言中数组和切片
go语言中数组和切片
45 7
|
1月前
|
Go 开发工具
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
1月前
|
程序员 Go
go语言中结构体(Struct)
go语言中结构体(Struct)
112 71
|
1月前
|
存储 Go 索引
go语言中的数组(Array)
go语言中的数组(Array)
115 67