goodscontroller.go 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356
  1. package controller
  2. import (
  3. "fmt"
  4. "github.com/gin-gonic/gin"
  5. "strconv"
  6. "trading-go/model"
  7. "trading-go/response"
  8. "trading-go/util"
  9. )
  10. //// GetAllGoods
  11. //// @Tags 商品模块
  12. //// @Summary 获取所有商品
  13. //// @Produce application/json
  14. //// @Success 200 {object} response.Response
  15. //// @Router /goods [get]
  16. //func GetAllGoods(c *gin.Context) {
  17. // var goods []model.GoodsSurface
  18. // goods = append(goods, model.GoodsSurface{})
  19. // goods = append(goods, model.GoodsSurface{})
  20. // response.Success(c.Writer, "success", goods)
  21. //}
  22. // CreatGoods
  23. // @Tags 商品模块
  24. // @Summary 创建商品
  25. // @Accept application/json
  26. // @Produce application/json
  27. // @Param json body model.GoodsJson true "商品信息"
  28. // @Success 200 {object} response.Response
  29. // @Router /goods/create [post]
  30. func CreatGoods(c *gin.Context) {
  31. var pic model.Pic
  32. var goodsJson model.GoodsJson
  33. var category model.CategoryOfGoods
  34. err := c.ShouldBindJSON(&goodsJson)
  35. if err != nil {
  36. msg := err.Error()
  37. response.Fail(c.Writer, msg, 500)
  38. return
  39. }
  40. if err != nil {
  41. msg := err.Error()
  42. response.Fail(c.Writer, msg, 500)
  43. return
  44. }
  45. fmt.Println(goodsJson)
  46. goods := goodsJson.Change()
  47. id, err := goods.Create()
  48. go util.NewIndex(id, goodsJson.Desc+goodsJson.Title)
  49. err = category.Save(id, goodsJson.Categories)
  50. err = pic.Save(id, goodsJson.Pic)
  51. if err != nil {
  52. msg := err.Error()
  53. response.Fail(c.Writer, msg, 500)
  54. return
  55. }
  56. response.Success(c.Writer, "success", nil)
  57. }
  58. // DGoods
  59. // @Tags 商品模块
  60. // @Summary 删除商品
  61. // @Produce application/json
  62. // @Param id path int64 true "商品id"
  63. // @Success 200 {object} response.Response
  64. // @Router /goods/delete/{id} [delete]
  65. func DGoods(c *gin.Context) {
  66. var goods model.Goods
  67. var pic model.Pic
  68. ids := c.Param("id")
  69. id, err := strconv.Atoi(ids)
  70. if err != nil {
  71. response.Fail(c.Writer, err.Error(), 500)
  72. return
  73. }
  74. goods.Id = uint(id)
  75. pic.Id = uint(id)
  76. err = goods.Delete()
  77. if err != nil {
  78. msg := err.Error()
  79. response.Fail(c.Writer, msg, 500)
  80. return
  81. }
  82. err = pic.Delete()
  83. if err != nil {
  84. msg := err.Error()
  85. response.Fail(c.Writer, msg, 500)
  86. return
  87. }
  88. go util.DelIndex(goods.Id)
  89. if err != nil {
  90. msg := err.Error()
  91. response.Fail(c.Writer, msg, 500)
  92. return
  93. }
  94. response.Success(c.Writer, "success", nil)
  95. }
  96. // GetGoodsPage
  97. // @Tags 商品模块
  98. // @Summary 获取所有商品
  99. // @Produce application/json
  100. // @Param page path int true "页数"
  101. // @Param pageSize path int true "一页的大小"
  102. // @Success 200 {object} response.Response
  103. // @Router /goods/{page}/{pageSize} [get]
  104. func GetGoodsPage(c *gin.Context) {
  105. var goods model.GoodsSurface
  106. p := c.Param("page")
  107. pS := c.Param("pageSize")
  108. page, err := strconv.Atoi(p)
  109. pageSize, err := strconv.Atoi(pS)
  110. if err != nil {
  111. msg := err.Error()
  112. response.Fail(c.Writer, msg, 500)
  113. return
  114. }
  115. rsp, err := goods.GetPaged(page, pageSize)
  116. if err != nil {
  117. msg := err.Error()
  118. response.Fail(c.Writer, msg, 500)
  119. return
  120. }
  121. cnt, err := goods.GetCnt()
  122. if err != nil {
  123. msg := err.Error()
  124. response.Fail(c.Writer, msg, 500)
  125. return
  126. }
  127. if cnt > page*pageSize {
  128. rsp.HNext = true
  129. }
  130. response.Success(c.Writer, "success", rsp)
  131. }
  132. // GetRecommend
  133. // @Tags 商品模块
  134. // @Summary 分页获取推荐商品
  135. // @Produce application/json
  136. // @Param id query int64 true "用户id"
  137. // @Param size query int true "推荐的数目"
  138. // @Success 200 {object} response.Response
  139. // @Router /goods/recommend [get]
  140. func GetRecommend(c *gin.Context) {
  141. var goods model.GoodsSurface
  142. ids := c.Query("id")
  143. s := c.Query("size")
  144. id, err := strconv.Atoi(ids)
  145. size, err := strconv.Atoi(s)
  146. if err != nil {
  147. response.Fail(c.Writer, err.Error(), 500)
  148. return
  149. }
  150. data, err := goods.GetRecommend(uint(id), size)
  151. if err != nil {
  152. response.Fail(c.Writer, err.Error(), 500)
  153. return
  154. }
  155. //rsp.Data = goods
  156. response.Success(c.Writer, "success", data)
  157. }
  158. // ReviseGoods
  159. // @Tags 商品模块
  160. // @Summary 修改商品信息
  161. // @Produce application/json
  162. // @Param json body model.Goods true "商品信息"
  163. // @Success 200 {object} response.Response
  164. // @Router /goods/revise [post]
  165. func ReviseGoods(c *gin.Context) {
  166. var goods model.Goods
  167. var pic model.Pic
  168. err := c.ShouldBindJSON(&goods)
  169. if err != nil {
  170. msg := err.Error()
  171. response.Fail(c.Writer, msg, 500)
  172. return
  173. }
  174. err = goods.Revise()
  175. if err != nil {
  176. msg := err.Error()
  177. response.Fail(c.Writer, msg, 500)
  178. return
  179. }
  180. pic.Id = goods.Id
  181. err = pic.Delete()
  182. err = pic.Save(pic.Id, goods.Pic)
  183. if err != nil {
  184. msg := err.Error()
  185. response.Fail(c.Writer, msg, 500)
  186. return
  187. }
  188. go func() {
  189. util.DelIndex(goods.Id)
  190. util.NewIndex(goods.Id, goods.Desc+goods.Title)
  191. }()
  192. response.Success(c.Writer, "success", nil)
  193. }
  194. // GetGoodDetail
  195. // @Tags 商品模块
  196. // @Summary 获取商品详细信息
  197. // @Produce application/json
  198. // @Param id path int64 true "商品id"
  199. // @Param uid query int64 true "访问的用户id"
  200. // @Success 200 {object} response.Response
  201. // @Router /goods/detail/{id} [get]
  202. func GetGoodDetail(c *gin.Context) {
  203. var goods model.Goods
  204. var pic model.Pic
  205. ids := c.Param("id")
  206. uids := c.Query("uid")
  207. id, err := strconv.Atoi(ids)
  208. uid, err := strconv.Atoi(uids)
  209. if err != nil {
  210. response.Fail(c.Writer, err.Error(), 500)
  211. return
  212. }
  213. goods.Id = uint(id)
  214. err = goods.GetDetail()
  215. pics, err := pic.GetGoodsPic(uint(id))
  216. goods.Pic = pics
  217. if err != nil {
  218. response.Fail(c.Writer, err.Error(), 500)
  219. return
  220. }
  221. err = model.Recommend(uint(uid), uint(id))
  222. if err != nil {
  223. response.Fail(c.Writer, err.Error(), 500)
  224. return
  225. }
  226. response.Success(c.Writer, "success", goods)
  227. }
  228. // GetUserGoods
  229. // @Tags 商品模块
  230. // @Summary 获取某个用户的所有商品
  231. // @Produce application/json
  232. // @Param id path int64 true "用户id"
  233. // @Success 200 {object} response.Response
  234. // @Router /goods/user/{id} [get]
  235. func GetUserGoods(c *gin.Context) {
  236. var goods model.Goods
  237. ids := c.Param("id")
  238. id, err := strconv.Atoi(ids)
  239. if err != nil {
  240. response.Fail(c.Writer, err.Error(), 500)
  241. return
  242. }
  243. goods.OwnerId = uint(id)
  244. data, err := goods.GetUserGoods()
  245. if err != nil {
  246. response.Fail(c.Writer, err.Error(), 500)
  247. return
  248. }
  249. response.Success(c.Writer, "success", data)
  250. }
  251. // SearchGoods
  252. // @Tags 商品模块
  253. // @Summary 搜索商品并分页显示
  254. // @Produce application/json
  255. // @Param page path int true "页数"
  256. // @Param pageSize path int true "一页的大小"
  257. // @Param keyword query string true "搜素关键词"
  258. // @Success 200 {object} response.Response
  259. // @Router /goods/search/{page}/{pageSize} [get]
  260. func SearchGoods(c *gin.Context) {
  261. var good model.GoodsSurface
  262. p := c.Param("page")
  263. pS := c.Param("pageSize")
  264. key := c.Query("keyword")
  265. page, err := strconv.Atoi(p)
  266. pageSize, err := strconv.Atoi(pS)
  267. if err != nil {
  268. msg := err.Error()
  269. response.Fail(c.Writer, msg, 500)
  270. return
  271. }
  272. rsp, err := good.SearchPaged(key, page, pageSize)
  273. if err != nil {
  274. response.Fail(c.Writer, err.Error(), 400)
  275. return
  276. }
  277. response.Success(c.Writer, "success", rsp)
  278. }
  279. // GetGoodsCategory
  280. // @Tags 商品模块
  281. // @Summary 按分类查找商品并分页显示
  282. // @Produce application/json
  283. // @Param page path int true "页数"
  284. // @Param pageSize path int true "一页的大小"
  285. // @Param category query uint true "商品分类id"
  286. // @Success 200 {object} response.Response
  287. // @Router /goods/category/{page}/{pageSize} [get]
  288. func GetGoodsCategory(c *gin.Context) {
  289. var goods model.GoodsSurface
  290. p := c.Param("page")
  291. pS := c.Param("pageSize")
  292. ca := c.Query("category")
  293. category, err := strconv.Atoi(ca)
  294. page, err := strconv.Atoi(p)
  295. pageSize, err := strconv.Atoi(pS)
  296. if err != nil {
  297. msg := err.Error()
  298. response.Fail(c.Writer, msg, 500)
  299. return
  300. }
  301. rsp, err := goods.GetCategoryPaged(page, pageSize, uint(category))
  302. if err != nil {
  303. msg := err.Error()
  304. response.Fail(c.Writer, msg, 500)
  305. return
  306. }
  307. cnt, err := goods.GetCategoryCnt(uint(category))
  308. if err != nil {
  309. msg := err.Error()
  310. response.Fail(c.Writer, msg, 500)
  311. return
  312. }
  313. if cnt > page*pageSize {
  314. rsp.HNext = true
  315. }
  316. response.Success(c.Writer, "success", rsp)
  317. }
  318. // GetGoodsList
  319. // @Tags 商品模块
  320. // @Summary 批量获取商品信息
  321. // @Produce application/json
  322. // @Param id body []string true "商品id列表"
  323. // @Success 200 {object} response.Response
  324. // @Router /goods/list [post]
  325. func GetGoodsList(c *gin.Context) {
  326. var g model.GoodsSurface
  327. jsonData := struct {
  328. Id []uint `json:"id"`
  329. }{}
  330. err := c.ShouldBindJSON(&jsonData)
  331. if err != nil {
  332. msg := err.Error()
  333. response.Fail(c.Writer, msg, 500)
  334. return
  335. }
  336. goodsInfo, err := g.GetGoodsList(jsonData.Id)
  337. if err != nil {
  338. msg := err.Error()
  339. response.Fail(c.Writer, msg, 500)
  340. return
  341. }
  342. response.Success(c.Writer, "success", gin.H{"goods": goodsInfo})
  343. }