【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


相关文章
|
15天前
|
安全 大数据 Go
深入探索Go语言并发编程:Goroutines与Channels的实战应用
在当今高性能、高并发的应用需求下,Go语言以其独特的并发模型——Goroutines和Channels,成为了众多开发者眼中的璀璨明星。本文不仅阐述了Goroutines作为轻量级线程的优势,还深入剖析了Channels作为Goroutines间通信的桥梁,如何优雅地解决并发编程中的复杂问题。通过实战案例,我们将展示如何利用这些特性构建高效、可扩展的并发系统,同时探讨并发编程中常见的陷阱与最佳实践,为读者打开Go语言并发编程的广阔视野。
|
1天前
|
Shell Go API
Go语言grequests库并发请求的实战案例
Go语言grequests库并发请求的实战案例
|
25天前
|
消息中间件 缓存 Kafka
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
go-zero微服务实战系列(八、如何处理每秒上万次的下单请求)
|
24天前
|
消息中间件 SQL 关系型数据库
go-zero微服务实战系列(十、分布式事务如何实现)
go-zero微服务实战系列(十、分布式事务如何实现)
|
24天前
|
消息中间件 NoSQL Kafka
go-zero微服务实战系列(九、极致优化秒杀性能)
go-zero微服务实战系列(九、极致优化秒杀性能)
|
10天前
|
程序员 Go PHP
为什么大部分的 PHP 程序员转不了 Go 语言?
【9月更文挑战第8天】大部分 PHP 程序员难以转向 Go 语言,主要因为:一、编程习惯与思维方式差异,如语法风格和编程范式;二、学习成本高,需掌握新知识体系且面临项目压力;三、职业发展考量,现有技能价值及市场需求不确定性。学习新语言虽有挑战,但对拓宽职业道路至关重要。
40 10
|
8天前
|
Go API 开发者
深入探讨:使用Go语言构建高性能RESTful API服务
在本文中,我们将探索Go语言在构建高效、可靠的RESTful API服务中的独特优势。通过实际案例分析,我们将展示Go如何通过其并发模型、简洁的语法和内置的http包,成为现代后端服务开发的有力工具。
|
10天前
|
算法 程序员 Go
PHP 程序员学会了 Go 语言就能唬住面试官吗?
【9月更文挑战第8天】学会Go语言可提升PHP程序员的面试印象,但不足以 solely “唬住” 面试官。学习新语言能展现学习能力、拓宽技术视野,并增加就业机会。然而,实际项目经验、深入理解语言特性和综合能力更为关键。全面展示这些方面才能真正提升面试成功率。
34 10
|
10天前
|
编译器 Go
go语言学习记录(关于一些奇怪的疑问)有别于其他编程语言
本文探讨了Go语言中的常量概念,特别是特殊常量iota的使用方法及其自动递增特性。同时,文中还提到了在声明常量时,后续常量可沿用前一个值的特点,以及在遍历map时可能遇到的非顺序打印问题。
|
8天前
|
存储 监控 数据可视化
Go 语言打造公司监控电脑的思路
在现代企业管理中,监控公司电脑系统对保障信息安全和提升工作效率至关重要。Go 语言凭借其高效性和简洁性,成为构建监控系统的理想选择。本文介绍了使用 Go 语言监控系统资源(如 CPU、内存)和网络活动的方法,并探讨了整合监控数据、设置告警机制及构建可视化界面的策略,以满足企业需求。
25 1