goodscontroller.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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 goodsJson model.GoodsJson
  32. var category model.CategoryOfGoods
  33. err := c.ShouldBindJSON(&goodsJson)
  34. if err != nil {
  35. msg := err.Error()
  36. response.Fail(c.Writer, msg, 500)
  37. return
  38. }
  39. if err != nil {
  40. msg := err.Error()
  41. response.Fail(c.Writer, msg, 500)
  42. return
  43. }
  44. goods := goodsJson.Change()
  45. id, err := goods.Create()
  46. go util.NewItem(id, uint(time.Now().Unix()), goodsJson.Title, goodsJson.Desc)
  47. go util.NewIndex(id, goodsJson.Desc+goodsJson.Title)
  48. err = category.Save(id, goodsJson.Categories)
  49. if err != nil {
  50. msg := err.Error()
  51. response.Fail(c.Writer, msg, 500)
  52. return
  53. }
  54. response.Success(c.Writer, "success", nil)
  55. }
  56. // DGoods
  57. // @Tags 商品模块
  58. // @Summary 删除商品
  59. // @Produce application/json
  60. // @Param id path int64 true "商品id"
  61. // @Success 200 {object} response.Response
  62. // @Router /goods/delete/{id} [delete]
  63. func DGoods(c *gin.Context) {
  64. var goods model.Goods
  65. ids := c.Param("id")
  66. id, err := strconv.Atoi(ids)
  67. go util.DelItem(uint(id))
  68. if err != nil {
  69. response.Fail(c.Writer, err.Error(), 500)
  70. return
  71. }
  72. goods.Id = uint(id)
  73. err = goods.Delete()
  74. go util.DelIndex(goods.Id)
  75. if err != nil {
  76. msg := err.Error()
  77. response.Fail(c.Writer, msg, 500)
  78. return
  79. }
  80. response.Success(c.Writer, "success", nil)
  81. }
  82. // GetGoodsPage
  83. // @Tags 商品模块
  84. // @Summary 获取所有商品
  85. // @Produce application/json
  86. // @Param page path int true "页数"
  87. // @Param pageSize path int true "一页的大小"
  88. // @Success 200 {object} response.Response
  89. // @Router /goods/{page}/{pageSize} [get]
  90. func GetGoodsPage(c *gin.Context) {
  91. var goods model.GoodsSurface
  92. p := c.Param("page")
  93. pS := c.Param("pageSize")
  94. page, err := strconv.Atoi(p)
  95. pageSize, err := strconv.Atoi(pS)
  96. if err != nil {
  97. msg := err.Error()
  98. response.Fail(c.Writer, msg, 500)
  99. return
  100. }
  101. rsp, err := goods.GetPaged(page, pageSize)
  102. if err != nil {
  103. msg := err.Error()
  104. response.Fail(c.Writer, msg, 500)
  105. return
  106. }
  107. cnt, err := goods.GetCnt()
  108. if err != nil {
  109. msg := err.Error()
  110. response.Fail(c.Writer, msg, 500)
  111. return
  112. }
  113. if cnt > page*pageSize {
  114. rsp.HNext = true
  115. }
  116. response.Success(c.Writer, "success", rsp)
  117. }
  118. // GetRecommend
  119. // @Tags 商品模块
  120. // @Summary 分页获取推荐商品
  121. // @Produce application/json
  122. // @Param id query int64 true "用户id"
  123. // @Param size query int true "推荐的数目"
  124. // @Success 200 {object} response.Response
  125. // @Router /goods/recommend [get]
  126. func GetRecommend(c *gin.Context) {
  127. var goods model.GoodsSurface
  128. ids := c.Param("id")
  129. s := c.Query("size")
  130. id, err := strconv.Atoi(ids)
  131. size, err := strconv.Atoi(s)
  132. if err != nil {
  133. response.Fail(c.Writer, err.Error(), 500)
  134. return
  135. }
  136. data, err := goods.GetRecommend(uint(id), size)
  137. if err != nil {
  138. response.Fail(c.Writer, err.Error(), 500)
  139. return
  140. }
  141. //rsp.Data = goods
  142. response.Success(c.Writer, "success", data)
  143. }
  144. // ReviseGoods
  145. // @Tags 商品模块
  146. // @Summary 修改商品信息
  147. // @Produce application/json
  148. // @Param json body model.Goods true "商品信息"
  149. // @Success 200 {object} response.Response
  150. // @Router /goods/revise [post]
  151. func ReviseGoods(c *gin.Context) {
  152. var goods model.Goods
  153. err := c.ShouldBindJSON(&goods)
  154. if err != nil {
  155. msg := err.Error()
  156. response.Fail(c.Writer, msg, 500)
  157. return
  158. }
  159. err = goods.Revise()
  160. go func() {
  161. util.DelIndex(goods.Id)
  162. util.NewIndex(goods.Id, goods.Desc+goods.Title)
  163. }()
  164. go func() {
  165. util.DelItem(goods.Id)
  166. util.NewItem(goods.Id, uint(time.Now().Unix()), goods.Title, goods.Desc)
  167. }()
  168. if err != nil {
  169. msg := err.Error()
  170. response.Fail(c.Writer, msg, 500)
  171. return
  172. }
  173. response.Success(c.Writer, "success", nil)
  174. }
  175. // GetGoodDetail
  176. // @Tags 商品模块
  177. // @Summary 获取商品详细信息
  178. // @Produce application/json
  179. // @Param id path int64 true "商品id"
  180. // @Param uid query int64 true "访问的用户id"
  181. // @Param date query int64 true "访问时间的时间戳"
  182. // @Success 200 {object} response.Response
  183. // @Router /goods/detail/{id} [get]
  184. func GetGoodDetail(c *gin.Context) {
  185. var goods model.Goods
  186. ids := c.Param("id")
  187. uids := c.Query("uid")
  188. ts := c.Query("date")
  189. id, err := strconv.Atoi(ids)
  190. uid, err := strconv.Atoi(uids)
  191. date, err := strconv.Atoi(ts)
  192. if err != nil {
  193. response.Fail(c.Writer, err.Error(), 500)
  194. return
  195. }
  196. goods.Id = uint(id)
  197. err = goods.GetDetail()
  198. if err != nil {
  199. response.Fail(c.Writer, err.Error(), 500)
  200. return
  201. }
  202. go util.Recommend(uint(uid), uint(id), uint(date))
  203. response.Success(c.Writer, "success", goods)
  204. }
  205. // GetUserGoods
  206. // @Tags 商品模块
  207. // @Summary 获取某个用户的所有商品
  208. // @Produce application/json
  209. // @Param id path int64 true "用户id"
  210. // @Success 200 {object} response.Response
  211. // @Router /goods/user/{id} [get]
  212. func GetUserGoods(c *gin.Context) {
  213. var goods model.Goods
  214. ids := c.Param("id")
  215. id, err := strconv.Atoi(ids)
  216. if err != nil {
  217. response.Fail(c.Writer, err.Error(), 500)
  218. return
  219. }
  220. goods.OwnerId = uint(id)
  221. data, err := goods.GetUserGoods()
  222. if err != nil {
  223. response.Fail(c.Writer, err.Error(), 500)
  224. return
  225. }
  226. response.Success(c.Writer, "success", data)
  227. }
  228. // SearchGoods
  229. // @Tags 商品模块
  230. // @Summary 搜索商品并分页显示
  231. // @Produce application/json
  232. // @Param page path int true "页数"
  233. // @Param pageSize path int true "一页的大小"
  234. // @Param keyword query string true "搜素关键词"
  235. // @Success 200 {object} response.Response
  236. // @Router /goods/search/{page}/{pageSize} [get]
  237. func SearchGoods(c *gin.Context) {
  238. var good model.GoodsSurface
  239. p := c.Param("page")
  240. pS := c.Param("pageSize")
  241. key := c.Query("keyword")
  242. page, err := strconv.Atoi(p)
  243. pageSize, err := strconv.Atoi(pS)
  244. if err != nil {
  245. msg := err.Error()
  246. response.Fail(c.Writer, msg, 500)
  247. return
  248. }
  249. rsp, err := good.SearchPaged(key, page, pageSize)
  250. if err != nil {
  251. response.Fail(c.Writer, err.Error(), 400)
  252. return
  253. }
  254. response.Success(c.Writer, "success", rsp)
  255. }
  256. // GetGoodsCategory
  257. // @Tags 商品模块
  258. // @Summary 按分类查找商品并分页显示
  259. // @Produce application/json
  260. // @Param page path int true "页数"
  261. // @Param pageSize path int true "一页的大小"
  262. // @Param category query uint true "商品分类id"
  263. // @Success 200 {object} response.Response
  264. // @Router /goods/category/{page}/{pageSize} [get]
  265. func GetGoodsCategory(c *gin.Context) {
  266. var goods model.GoodsSurface
  267. p := c.Param("page")
  268. pS := c.Param("pageSize")
  269. ca := c.Query("category")
  270. category, err := strconv.Atoi(ca)
  271. page, err := strconv.Atoi(p)
  272. pageSize, err := strconv.Atoi(pS)
  273. if err != nil {
  274. msg := err.Error()
  275. response.Fail(c.Writer, msg, 500)
  276. return
  277. }
  278. rsp, err := goods.GetCategoryPaged(page, pageSize, uint(category))
  279. if err != nil {
  280. msg := err.Error()
  281. response.Fail(c.Writer, msg, 500)
  282. return
  283. }
  284. cnt, err := goods.GetCategoryCnt(uint(category))
  285. if err != nil {
  286. msg := err.Error()
  287. response.Fail(c.Writer, msg, 500)
  288. return
  289. }
  290. if cnt > page*pageSize {
  291. rsp.HNext = true
  292. }
  293. response.Success(c.Writer, "success", rsp)
  294. }