goodscontroller.go 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "strconv"
  5. "time"
  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. goods := goodsJson.Change()
  46. id, err := goods.Create()
  47. go util.NewItem(id, uint(time.Now().Unix()), goodsJson.Title, goodsJson.Desc)
  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. ids := c.Param("id")
  68. id, err := strconv.Atoi(ids)
  69. go util.DelItem(uint(id))
  70. if err != nil {
  71. response.Fail(c.Writer, err.Error(), 500)
  72. return
  73. }
  74. goods.Id = uint(id)
  75. err = goods.Delete()
  76. go util.DelIndex(goods.Id)
  77. if err != nil {
  78. msg := err.Error()
  79. response.Fail(c.Writer, msg, 500)
  80. return
  81. }
  82. response.Success(c.Writer, "success", nil)
  83. }
  84. // GetGoodsPage
  85. // @Tags 商品模块
  86. // @Summary 获取所有商品
  87. // @Produce application/json
  88. // @Param page path int true "页数"
  89. // @Param pageSize path int true "一页的大小"
  90. // @Success 200 {object} response.Response
  91. // @Router /goods/{page}/{pageSize} [get]
  92. func GetGoodsPage(c *gin.Context) {
  93. var goods model.GoodsSurface
  94. p := c.Param("page")
  95. pS := c.Param("pageSize")
  96. page, err := strconv.Atoi(p)
  97. pageSize, err := strconv.Atoi(pS)
  98. if err != nil {
  99. msg := err.Error()
  100. response.Fail(c.Writer, msg, 500)
  101. return
  102. }
  103. rsp, err := goods.GetPaged(page, pageSize)
  104. if err != nil {
  105. msg := err.Error()
  106. response.Fail(c.Writer, msg, 500)
  107. return
  108. }
  109. cnt, err := goods.GetCnt()
  110. if err != nil {
  111. msg := err.Error()
  112. response.Fail(c.Writer, msg, 500)
  113. return
  114. }
  115. if cnt > page*pageSize {
  116. rsp.HNext = true
  117. }
  118. response.Success(c.Writer, "success", rsp)
  119. }
  120. // GetRecommend
  121. // @Tags 商品模块
  122. // @Summary 分页获取推荐商品
  123. // @Produce application/json
  124. // @Param id query int64 true "用户id"
  125. // @Param size query int true "推荐的数目"
  126. // @Success 200 {object} response.Response
  127. // @Router /goods/recommend [get]
  128. func GetRecommend(c *gin.Context) {
  129. var goods model.GoodsSurface
  130. ids := c.Param("id")
  131. s := c.Query("size")
  132. id, err := strconv.Atoi(ids)
  133. size, err := strconv.Atoi(s)
  134. if err != nil {
  135. response.Fail(c.Writer, err.Error(), 500)
  136. return
  137. }
  138. data, err := goods.GetRecommend(uint(id), size)
  139. if err != nil {
  140. response.Fail(c.Writer, err.Error(), 500)
  141. return
  142. }
  143. //rsp.Data = goods
  144. response.Success(c.Writer, "success", data)
  145. }
  146. // ReviseGoods
  147. // @Tags 商品模块
  148. // @Summary 修改商品信息
  149. // @Produce application/json
  150. // @Param json body model.Goods true "商品信息"
  151. // @Success 200 {object} response.Response
  152. // @Router /goods/revise [post]
  153. func ReviseGoods(c *gin.Context) {
  154. var goods model.Goods
  155. err := c.ShouldBindJSON(&goods)
  156. if err != nil {
  157. msg := err.Error()
  158. response.Fail(c.Writer, msg, 500)
  159. return
  160. }
  161. err = goods.Revise()
  162. go func() {
  163. util.DelIndex(goods.Id)
  164. util.NewIndex(goods.Id, goods.Desc+goods.Title)
  165. }()
  166. go func() {
  167. util.DelItem(goods.Id)
  168. util.NewItem(goods.Id, uint(time.Now().Unix()), goods.Title, goods.Desc)
  169. }()
  170. if err != nil {
  171. msg := err.Error()
  172. response.Fail(c.Writer, msg, 500)
  173. return
  174. }
  175. response.Success(c.Writer, "success", nil)
  176. }
  177. // GetGoodDetail
  178. // @Tags 商品模块
  179. // @Summary 获取商品详细信息
  180. // @Produce application/json
  181. // @Param id path int64 true "商品id"
  182. // @Param uid query int64 true "访问的用户id"
  183. // @Param date query int64 true "访问时间的时间戳"
  184. // @Success 200 {object} response.Response
  185. // @Router /goods/detail/{id} [get]
  186. func GetGoodDetail(c *gin.Context) {
  187. var goods model.Goods
  188. var pic model.Pic
  189. ids := c.Param("id")
  190. uids := c.Query("uid")
  191. ts := c.Query("date")
  192. id, err := strconv.Atoi(ids)
  193. uid, err := strconv.Atoi(uids)
  194. date, err := strconv.Atoi(ts)
  195. if err != nil {
  196. response.Fail(c.Writer, err.Error(), 500)
  197. return
  198. }
  199. goods.Id = uint(id)
  200. err = goods.GetDetail()
  201. pics, err := pic.GetGoodsPic(uint(id))
  202. goods.Pic = pics
  203. if err != nil {
  204. response.Fail(c.Writer, err.Error(), 500)
  205. return
  206. }
  207. go util.Recommend(uint(uid), uint(id), uint(date))
  208. response.Success(c.Writer, "success", goods)
  209. }
  210. // GetUserGoods
  211. // @Tags 商品模块
  212. // @Summary 获取某个用户的所有商品
  213. // @Produce application/json
  214. // @Param id path int64 true "用户id"
  215. // @Success 200 {object} response.Response
  216. // @Router /goods/user/{id} [get]
  217. func GetUserGoods(c *gin.Context) {
  218. var goods model.Goods
  219. ids := c.Param("id")
  220. id, err := strconv.Atoi(ids)
  221. if err != nil {
  222. response.Fail(c.Writer, err.Error(), 500)
  223. return
  224. }
  225. goods.OwnerId = uint(id)
  226. data, err := goods.GetUserGoods()
  227. if err != nil {
  228. response.Fail(c.Writer, err.Error(), 500)
  229. return
  230. }
  231. response.Success(c.Writer, "success", data)
  232. }
  233. // SearchGoods
  234. // @Tags 商品模块
  235. // @Summary 搜索商品并分页显示
  236. // @Produce application/json
  237. // @Param page path int true "页数"
  238. // @Param pageSize path int true "一页的大小"
  239. // @Param keyword query string true "搜素关键词"
  240. // @Success 200 {object} response.Response
  241. // @Router /goods/search/{page}/{pageSize} [get]
  242. func SearchGoods(c *gin.Context) {
  243. var good model.GoodsSurface
  244. p := c.Param("page")
  245. pS := c.Param("pageSize")
  246. key := c.Query("keyword")
  247. page, err := strconv.Atoi(p)
  248. pageSize, err := strconv.Atoi(pS)
  249. if err != nil {
  250. msg := err.Error()
  251. response.Fail(c.Writer, msg, 500)
  252. return
  253. }
  254. rsp, err := good.SearchPaged(key, page, pageSize)
  255. if err != nil {
  256. response.Fail(c.Writer, err.Error(), 400)
  257. return
  258. }
  259. response.Success(c.Writer, "success", rsp)
  260. }
  261. // GetGoodsCategory
  262. // @Tags 商品模块
  263. // @Summary 按分类查找商品并分页显示
  264. // @Produce application/json
  265. // @Param page path int true "页数"
  266. // @Param pageSize path int true "一页的大小"
  267. // @Param category query uint true "商品分类id"
  268. // @Success 200 {object} response.Response
  269. // @Router /goods/category/{page}/{pageSize} [get]
  270. func GetGoodsCategory(c *gin.Context) {
  271. var goods model.GoodsSurface
  272. p := c.Param("page")
  273. pS := c.Param("pageSize")
  274. ca := c.Query("category")
  275. category, err := strconv.Atoi(ca)
  276. page, err := strconv.Atoi(p)
  277. pageSize, err := strconv.Atoi(pS)
  278. if err != nil {
  279. msg := err.Error()
  280. response.Fail(c.Writer, msg, 500)
  281. return
  282. }
  283. rsp, err := goods.GetCategoryPaged(page, pageSize, uint(category))
  284. if err != nil {
  285. msg := err.Error()
  286. response.Fail(c.Writer, msg, 500)
  287. return
  288. }
  289. cnt, err := goods.GetCategoryCnt(uint(category))
  290. if err != nil {
  291. msg := err.Error()
  292. response.Fail(c.Writer, msg, 500)
  293. return
  294. }
  295. if cnt > page*pageSize {
  296. rsp.HNext = true
  297. }
  298. response.Success(c.Writer, "success", rsp)
  299. }
  300. // GetGoodsList
  301. // @Tags 商品模块
  302. // @Summary 批量获取商品信息
  303. // @Produce application/json
  304. // @Param id body []string true "商品id列表"
  305. // @Success 200 {object} response.Response
  306. // @Router /goods/list [post]
  307. func GetGoodsList(c *gin.Context) {
  308. var g model.GoodsSurface
  309. jsonData := struct {
  310. Id []uint `json:"id"`
  311. }{}
  312. err := c.ShouldBindJSON(&jsonData)
  313. if err != nil {
  314. msg := err.Error()
  315. response.Fail(c.Writer, msg, 500)
  316. return
  317. }
  318. goodsInfo, err := g.GetGoodsList(jsonData.Id)
  319. if err != nil {
  320. msg := err.Error()
  321. response.Fail(c.Writer, msg, 500)
  322. return
  323. }
  324. response.Success(c.Writer, "success", gin.H{"goods": goodsInfo})
  325. }