【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


相关文章
|
2月前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
2月前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
3月前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
3月前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
3月前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
10天前
|
存储 JSON 监控
Viper,一个Go语言配置管理神器!
Viper 是一个功能强大的 Go 语言配置管理库,支持从多种来源读取配置,包括文件、环境变量、远程配置中心等。本文详细介绍了 Viper 的核心特性和使用方法,包括从本地 YAML 文件和 Consul 远程配置中心读取配置的示例。Viper 的多来源配置、动态配置和轻松集成特性使其成为管理复杂应用配置的理想选择。
30 2
|
8天前
|
Go 索引
go语言中的循环语句
【11月更文挑战第4天】
19 2
|
8天前
|
Go C++
go语言中的条件语句
【11月更文挑战第4天】
21 2
|
3天前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
16 4
|
3天前
|
缓存 监控 前端开发
在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统
本文深入探讨了在 Go 语言中实现 WebSocket 实时通信的应用,包括 WebSocket 的简介、Go 语言的优势、基本实现步骤、应用案例、注意事项及性能优化策略,旨在帮助开发者构建高效稳定的实时通信系统。
27 1