goodscontroller.go 8.8 KB

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