Bläddra i källkod

api实现以及建表

May1145 1 år sedan
förälder
incheckning
144f6fc0f7

+ 36 - 0
.idea/inspectionProfiles/Project_Default.xml

@@ -0,0 +1,36 @@
+<component name="InspectionProjectProfileManager">
+  <profile version="1.0">
+    <option name="myName" value="Project Default" />
+    <inspection_tool class="HttpUrlsUsage" enabled="true" level="WEAK WARNING" enabled_by_default="true">
+      <option name="ignoredUrls">
+        <list>
+          <option value="http://localhost" />
+          <option value="http://127.0.0.1" />
+          <option value="http://0.0.0.0" />
+          <option value="http://www.w3.org/" />
+          <option value="http://json-schema.org/draft" />
+          <option value="http://java.sun.com/" />
+          <option value="http://xmlns.jcp.org/" />
+          <option value="http://javafx.com/javafx/" />
+          <option value="http://javafx.com/fxml" />
+          <option value="http://maven.apache.org/xsd/" />
+          <option value="http://maven.apache.org/POM/" />
+          <option value="http://www.springframework.org/schema/" />
+          <option value="http://www.springframework.org/tags" />
+          <option value="http://www.springframework.org/security/tags" />
+          <option value="http://www.thymeleaf.org" />
+          <option value="http://www.jboss.org/j2ee/schema/" />
+          <option value="http://www.jboss.com/xml/ns/" />
+          <option value="http://www.ibm.com/webservices/xsd" />
+          <option value="http://activemq.apache.org/schema/" />
+          <option value="http://schema.cloudfoundry.org/spring/" />
+          <option value="http://schemas.xmlsoap.org/" />
+          <option value="http://cxf.apache.org/schemas/" />
+          <option value="http://primefaces.org/ui" />
+          <option value="http://tiles.apache.org/" />
+          <option value="http://" />
+        </list>
+      </option>
+    </inspection_tool>
+  </profile>
+</component>

+ 60 - 5
trading-go/controller/appraisecontroller.go

@@ -1,7 +1,9 @@
 package controller
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"strconv"
 	"trading-go/model"
 	"trading-go/response"
 )
@@ -14,6 +16,21 @@ import (
 // @Success 200 {object} response.Response
 // @Router /appraise/create [post]
 func CreateAppraise(c *gin.Context) {
+	var appraiseJson model.AppraiseJson
+	err := c.ShouldBindJSON(&appraiseJson)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	appraise := appraiseJson.Change()
+	fmt.Println(appraise)
+	err = appraise.Create()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -21,10 +38,24 @@ func CreateAppraise(c *gin.Context) {
 // @Tags 评论模块
 // @Summary 删除评论
 // @Produce application/json
-// @Param id path int64 true "评论id"
+// @Param id path uint true "评论id"
 // @Success 200 {object} response.Response
 // @Router /appraise/delete/{id} [delete]
 func DAppraise(c *gin.Context) {
+	var appraise model.Appraise
+	ids := c.Param("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	appraise.Id = uint(id)
+	err = appraise.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -36,6 +67,19 @@ func DAppraise(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /appraise/revise [post]
 func RAppraise(c *gin.Context) {
+	var appraise model.Appraise
+	err := c.ShouldBindJSON(&appraise)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	err = appraise.Revise()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -43,12 +87,23 @@ func RAppraise(c *gin.Context) {
 // @Tags 评论模块
 // @Summary 获取用户评价
 // @Produce application/json
-// @Param id query int64 true "用户id"
+// @Param id query uint true "用户id"
 // @Success 200 {object} response.Response
 // @Router /appraise/user [get]
 func GetUserAppraise(c *gin.Context) {
-	var appraises []model.Appraise
-	appraises = append(appraises, model.Appraise{})
-	appraises = append(appraises, model.Appraise{})
+	var appraise model.Appraise
+	ids := c.Query("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	appraise.BuyerId = uint(id)
+	appraises, err := appraise.GetOwn()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", appraises)
 }

+ 23 - 5
trading-go/controller/categorycontroller.go

@@ -15,9 +15,13 @@ import (
 // @Success 200 {object} response.Response
 // @Router /category [get]
 func GetAllCategories(c *gin.Context) {
-	var categories []model.Category
-	categories = append(categories, model.Category{})
-	categories = append(categories, model.Category{})
+	var category model.Category
+	categories, err := category.GetAll()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", categories)
 }
 
@@ -31,12 +35,20 @@ func GetAllCategories(c *gin.Context) {
 // @Router /category/create [post]
 func CreateCategory(c *gin.Context) {
 	var categoryJson model.CategoryJson
+	var category model.Category
 	err := c.ShouldBindJSON(&categoryJson)
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
+	category = categoryJson.Change()
+	err = category.Create()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -44,7 +56,7 @@ func CreateCategory(c *gin.Context) {
 // @Tags 分类模块
 // @Summary 根据分类id删除某个分类
 // @Produce application/json
-// @Param id path int64 true "分类id"
+// @Param id path uint true "分类id"
 // @Success 200 {object} response.Response
 // @Router /category/delete/{id} [delete]
 func DCategory(c *gin.Context) {
@@ -55,7 +67,13 @@ func DCategory(c *gin.Context) {
 		response.Fail(c.Writer, err.Error(), 500)
 		return
 	}
-	category.Id = int64(id)
+	category.Id = uint(id)
+	err = category.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 
 }

+ 6 - 6
trading-go/controller/chatcontroller.go

@@ -21,14 +21,14 @@ type client struct {
 	pip  chan *model.Message
 }
 
-var Conns map[int64]*client
+var Conns map[uint]*client
 
 func init() {
-	Conns = make(map[int64]*client)
+	Conns = make(map[uint]*client)
 }
 
 // 发送消息
-func send(conn *websocket.Conn, uid int64) {
+func send(conn *websocket.Conn, uid uint) {
 	pip := Conns[uid].pip
 	defer func() {
 		delete(Conns, uid)
@@ -49,7 +49,7 @@ func send(conn *websocket.Conn, uid int64) {
 }
 
 // 接收消息
-func reception(conn *websocket.Conn, uid int64) {
+func reception(conn *websocket.Conn, uid uint) {
 	defer func() {
 		delete(Conns, uid)
 	}()
@@ -83,7 +83,7 @@ func broadcast(data model.Message) {
 	}
 }
 
-func Chat(w http.ResponseWriter, rq *http.Request, uid int64) {
+func Chat(w http.ResponseWriter, rq *http.Request, uid uint) {
 	// 升级为websocket
 	conn, err := UP.Upgrade(w, rq, nil)
 
@@ -116,5 +116,5 @@ func LinkToServer(c *gin.Context) {
 		response.Fail(c.Writer, "failed", 500)
 		return
 	}
-	Chat(c.Writer, c.Request, int64(uid))
+	Chat(c.Writer, c.Request, uint(uid))
 }

+ 154 - 21
trading-go/controller/goodscontroller.go

@@ -2,22 +2,23 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"strconv"
 	"trading-go/model"
 	"trading-go/response"
 )
 
-// GetAllGoods
-// @Tags 商品模块
-// @Summary 获取所有商品
-// @Produce application/json
-// @Success 200 {object} response.Response
-// @Router /goods [get]
-func GetAllGoods(c *gin.Context) {
-	var goods []model.GoodsSurface
-	goods = append(goods, model.GoodsSurface{})
-	goods = append(goods, model.GoodsSurface{})
-	response.Success(c.Writer, "success", goods)
-}
+//// GetAllGoods
+//// @Tags 商品模块
+//// @Summary 获取所有商品
+//// @Produce application/json
+//// @Success 200 {object} response.Response
+//// @Router /goods [get]
+//func GetAllGoods(c *gin.Context) {
+//	var goods []model.GoodsSurface
+//	goods = append(goods, model.GoodsSurface{})
+//	goods = append(goods, model.GoodsSurface{})
+//	response.Success(c.Writer, "success", goods)
+//}
 
 // CreatGoods
 // @Tags 商品模块
@@ -28,6 +29,27 @@ func GetAllGoods(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/create [post]
 func CreatGoods(c *gin.Context) {
+	var goodsJson model.GoodsJson
+	var category model.CategoryOfGoods
+	err := c.ShouldBindJSON(&goodsJson)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	goods := goodsJson.Change()
+	id, err := goods.Create()
+	err = category.Save(id, goodsJson.Categories)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -39,6 +61,20 @@ func CreatGoods(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/delete/{id} [delete]
 func DGoods(c *gin.Context) {
+	var goods model.Goods
+	ids := c.Param("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	goods.Id = uint(id)
+	err = goods.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -51,11 +87,31 @@ func DGoods(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/{page}/{pageSize} [get]
 func GetGoodsPage(c *gin.Context) {
-	var goods []model.GoodsSurface
-	var rsp response.PageResponse
-	goods = append(goods, model.GoodsSurface{})
-	goods = append(goods, model.GoodsSurface{})
-	rsp.Data = goods
+	var goods model.GoodsSurface
+	p := c.Param("page")
+	pS := c.Param("pageSize")
+	page, err := strconv.Atoi(p)
+	pageSize, err := strconv.Atoi(pS)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	rsp, err := goods.GetPaged(page, pageSize)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	cnt, err := goods.GetCnt()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	if cnt > page*pageSize {
+		rsp.HNext = true
+	}
 	response.Success(c.Writer, "success", rsp)
 }
 
@@ -73,7 +129,7 @@ func GetRecommend(c *gin.Context) {
 	var rsp response.PageResponse
 	goods = append(goods, model.GoodsSurface{})
 	goods = append(goods, model.GoodsSurface{})
-	rsp.Data = goods
+	//rsp.Data = goods
 	response.Success(c.Writer, "success", rsp)
 }
 
@@ -85,6 +141,19 @@ func GetRecommend(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/revise [post]
 func ReviseGoods(c *gin.Context) {
+	var goods model.Goods
+	err := c.ShouldBindJSON(&goods)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	err = goods.Revise()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -96,6 +165,19 @@ func ReviseGoods(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/detail/{id} [get]
 func GetGoodDetail(c *gin.Context) {
+	var goods model.Goods
+	ids := c.Param("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	goods.Id = uint(id)
+	err = goods.GetDetail()
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
 	response.Success(c.Writer, "success", model.Goods{})
 }
 
@@ -107,8 +189,19 @@ func GetGoodDetail(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /goods/user/{id} [get]
 func GetUserGoods(c *gin.Context) {
-	var data []model.GoodsSurface
-	data = append(data, model.GoodsSurface{})
+	var goods model.Goods
+	ids := c.Param("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	goods.OwnerId = uint(id)
+	data, err := goods.GetUserGoods()
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
 	response.Success(c.Writer, "success", data)
 }
 
@@ -126,6 +219,46 @@ func SearchGoods(c *gin.Context) {
 	var rsp response.PageResponse
 	goods = append(goods, model.GoodsSurface{})
 	goods = append(goods, model.GoodsSurface{})
-	rsp.Data = goods
+	//rsp.Data = goods
+	response.Success(c.Writer, "success", rsp)
+}
+
+// GetGoodsCategory
+// @Tags 商品模块
+// @Summary  按分类查找商品并分页显示
+// @Produce application/json
+// @Param page path int true "页数"
+// @Param pageSize path int true "一页的大小"
+// @Param category query uint true "商品分类id"
+// @Success 200 {object} response.Response
+// @Router /goods/category/{page}/{pageSize} [get]
+func GetGoodsCategory(c *gin.Context) {
+	var goods model.GoodsSurface
+	p := c.Param("page")
+	pS := c.Param("pageSize")
+	ca := c.Query("category")
+	category, err := strconv.Atoi(ca)
+	page, err := strconv.Atoi(p)
+	pageSize, err := strconv.Atoi(pS)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	rsp, err := goods.GetCategoryPaged(page, pageSize, uint(category))
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	cnt, err := goods.GetCategoryCnt(uint(category))
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	if cnt > page*pageSize {
+		rsp.HNext = true
+	}
 	response.Success(c.Writer, "success", rsp)
 }

+ 69 - 9
trading-go/controller/ordercontroller.go

@@ -2,6 +2,7 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"strconv"
 	"trading-go/model"
 	"trading-go/response"
 )
@@ -13,9 +14,13 @@ import (
 // @Success 200 {object} response.Response
 // @Router /order [get]
 func GetAllOrder(c *gin.Context) {
-	var orders []model.Order
-	orders = append(orders, model.Order{})
-	orders = append(orders, model.Order{})
+	var order model.Order
+	orders, err := order.GetAll()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", orders)
 }
 
@@ -23,13 +28,19 @@ func GetAllOrder(c *gin.Context) {
 // @Tags 订单模块
 // @Summary 获取用户的所有订单
 // @Produce application/json
-// @Param id query int64 true "用户id"
+// @Param id query uint true "用户id"
 // @Success 200 {object} response.Response
 // @Router /order/user [get]
 func GetUserOrder(c *gin.Context) {
-	var orders []model.Order
-	orders = append(orders, model.Order{})
-	orders = append(orders, model.Order{})
+	var order model.Order
+	ids := c.Query("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	ownerId := uint(id)
+	orders, err := order.GetOwner(ownerId)
 	response.Success(c.Writer, "success", orders)
 }
 
@@ -37,11 +48,32 @@ func GetUserOrder(c *gin.Context) {
 // @Tags 订单模块
 // @Summary 修改订单的状态
 // @Produce application/json
-// @Param id formData int64 true "订单id"
+// @Param id formData uint true "订单id"
 // @Param state formData int true "订单状态"
 // @Success 200 {object} response.Response
 // @Router /order/revise [post]
 func ReviseOrder(c *gin.Context) {
+	var order model.Order
+	ids := c.PostForm("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	order.Id = uint(id)
+	states := c.PostForm("state")
+	state, err := strconv.Atoi(states)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	order.State = state
+	err = order.Revise()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -53,6 +85,20 @@ func ReviseOrder(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /order/create [post]
 func CreateOrder(c *gin.Context) {
+	var orderJson model.OrderJson
+	err := c.ShouldBindJSON(&orderJson)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	order := orderJson.Change()
+	err = order.Create()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }
 
@@ -60,9 +106,23 @@ func CreateOrder(c *gin.Context) {
 // @Tags 订单模块
 // @Summary 删除订单
 // @Produce application/json
-// @Param id path int64 true "订单id"
+// @Param id path uint true "订单id"
 // @Success 200 {object} response.Response
 // @Router /order/delete/{id} [delete]
 func DeleteOrder(c *gin.Context) {
+	var order model.Order
+	ids := c.PostForm("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	order.Id = uint(id)
+	err = order.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }

+ 48 - 5
trading-go/controller/piccontrller.go

@@ -2,6 +2,8 @@ package controller
 
 import (
 	"github.com/gin-gonic/gin"
+	"strconv"
+	"time"
 	"trading-go/model"
 	"trading-go/response"
 )
@@ -15,7 +17,30 @@ import (
 // @Success 200 {object} response.Response
 // @Router /pic/upload [post]
 func Upload(c *gin.Context) {
-	_, _ = c.FormFile("file")
+	var pic model.Pic
+	file, err := c.FormFile("pic")
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	file.Filename = time.Now().String() + file.Filename
+	path := "./pic/" + file.Filename
+	err = c.SaveUploadedFile(file, path)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	url := "http://" + c.Request.Host + file.Filename
+	pic.Name = file.Filename
+	pic.Url = url
+	err = pic.Save()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", model.Pic{})
 }
 
@@ -26,9 +51,13 @@ func Upload(c *gin.Context) {
 // @Success 200 {object} response.Response
 // @Router /pic [get]
 func GetAllPic(c *gin.Context) {
-	var pics []model.Pic
-	pics = append(pics, model.Pic{})
-	pics = append(pics, model.Pic{})
+	var pic model.Pic
+	pics, err := pic.GetAll()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", pics)
 }
 
@@ -36,9 +65,23 @@ func GetAllPic(c *gin.Context) {
 // @Tags 图片模块
 // @Summary 删除图片
 // @Produce application/json
-// @Param id path int64 true "图片id"
+// @Param id path uint true "图片id"
 // @Success 200 {object} response.Response
 // @Router /pic/delete/{id} [delete]
 func DPic(c *gin.Context) {
+	var pic model.Pic
+	ids := c.Param("id")
+	id, err := strconv.Atoi(ids)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
+	pic.Id = uint(id)
+	err = pic.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	response.Success(c.Writer, "success", nil)
 }

+ 4 - 4
trading-go/controller/relationcontroller.go

@@ -34,7 +34,7 @@ func RCreat(c *gin.Context) {
 // @Tags 用户关系模块
 // @Summary 传入用户id获取用户好友列表
 // @Produce application/json
-// @Param uid query int64 true "用户id"
+// @Param uid query uint true "用户id"
 // @Success 200 {object} response.Response
 // @Router /relation/friend [get]
 func GetFriend(c *gin.Context) {
@@ -57,7 +57,7 @@ func GetFriend(c *gin.Context) {
 // @Tags 用户关系模块
 // @Summary 传入用户id获取用户黑名单列表
 // @Produce application/json
-// @Param uid query int64 true "用户id"
+// @Param uid query uint true "用户id"
 // @Success 200 {object} response.Response
 // @Router /relation/bad [get]
 func GetBadRelation(c *gin.Context) {
@@ -80,7 +80,7 @@ func GetBadRelation(c *gin.Context) {
 // @Tags 用户关系模块
 // @Summary 根据关系id删除关系
 // @Produce application/json
-// @Param id path int64 true "关系id"
+// @Param id path uint true "关系id"
 // @Success 200 {object} response.Response
 // @Router /relation/delete/{id} [delete]
 func DRelation(c *gin.Context) {
@@ -91,7 +91,7 @@ func DRelation(c *gin.Context) {
 		response.Fail(c.Writer, err.Error(), 500)
 		return
 	}
-	relation.Id = int64(id)
+	relation.Id = uint(id)
 	err = relation.DRelation()
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)

+ 1 - 1
trading-go/controller/usercontroller.go

@@ -29,7 +29,7 @@ func Register(c *gin.Context) {
 		response.Fail(c.Writer, msg, 400)
 	}
 	user := model.User{
-		Uid:    id,
+		Uid:    uint(id),
 		Vid:    userJ.Vid,
 		Name:   userJ.Name,
 		Avatar: userJ.Avatar,

+ 29 - 20
trading-go/docs/docs.go

@@ -236,7 +236,7 @@ const docTemplate = `{
                 }
             }
         },
-        "/goods": {
+        "/goods/category/{page}/{pageSize}": {
             "get": {
                 "produces": [
                     "application/json"
@@ -244,7 +244,30 @@ const docTemplate = `{
                 "tags": [
                     "商品模块"
                 ],
-                "summary": "获取所有商品",
+                "summary": "按分类查找商品并分页显示",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "商品分类id",
+                        "name": "category",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -1102,8 +1125,8 @@ const docTemplate = `{
                 "ownerId": {
                     "type": "integer"
                 },
-                "pic": {
-                    "$ref": "#/definitions/model.Pic"
+                "picId": {
+                    "type": "integer"
                 },
                 "place": {
                     "type": "string"
@@ -1137,8 +1160,8 @@ const docTemplate = `{
                 "ownerId": {
                     "type": "integer"
                 },
-                "pic": {
-                    "$ref": "#/definitions/model.Pic"
+                "pic_id": {
+                    "type": "integer"
                 },
                 "place": {
                     "type": "string"
@@ -1173,21 +1196,7 @@ const docTemplate = `{
                     "type": "integer"
                 },
                 "time": {
-                    "type": "string"
-                }
-            }
-        },
-        "model.Pic": {
-            "type": "object",
-            "properties": {
-                "id": {
                     "type": "integer"
-                },
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
                 }
             }
         },

+ 29 - 20
trading-go/docs/swagger.json

@@ -229,7 +229,7 @@
                 }
             }
         },
-        "/goods": {
+        "/goods/category/{page}/{pageSize}": {
             "get": {
                 "produces": [
                     "application/json"
@@ -237,7 +237,30 @@
                 "tags": [
                     "商品模块"
                 ],
-                "summary": "获取所有商品",
+                "summary": "按分类查找商品并分页显示",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "商品分类id",
+                        "name": "category",
+                        "in": "query",
+                        "required": true
+                    }
+                ],
                 "responses": {
                     "200": {
                         "description": "OK",
@@ -1095,8 +1118,8 @@
                 "ownerId": {
                     "type": "integer"
                 },
-                "pic": {
-                    "$ref": "#/definitions/model.Pic"
+                "picId": {
+                    "type": "integer"
                 },
                 "place": {
                     "type": "string"
@@ -1130,8 +1153,8 @@
                 "ownerId": {
                     "type": "integer"
                 },
-                "pic": {
-                    "$ref": "#/definitions/model.Pic"
+                "pic_id": {
+                    "type": "integer"
                 },
                 "place": {
                     "type": "string"
@@ -1166,21 +1189,7 @@
                     "type": "integer"
                 },
                 "time": {
-                    "type": "string"
-                }
-            }
-        },
-        "model.Pic": {
-            "type": "object",
-            "properties": {
-                "id": {
                     "type": "integer"
-                },
-                "name": {
-                    "type": "string"
-                },
-                "url": {
-                    "type": "string"
                 }
             }
         },

+ 23 - 16
trading-go/docs/swagger.yaml

@@ -45,8 +45,8 @@ definitions:
         type: integer
       ownerId:
         type: integer
-      pic:
-        $ref: '#/definitions/model.Pic'
+      picId:
+        type: integer
       place:
         type: string
       price:
@@ -68,8 +68,8 @@ definitions:
         type: integer
       ownerId:
         type: integer
-      pic:
-        $ref: '#/definitions/model.Pic'
+      pic_id:
+        type: integer
       place:
         type: string
       price:
@@ -92,16 +92,7 @@ definitions:
       state:
         type: integer
       time:
-        type: string
-    type: object
-  model.Pic:
-    properties:
-      id:
         type: integer
-      name:
-        type: string
-      url:
-        type: string
     type: object
   model.RelationJson:
     properties:
@@ -292,8 +283,19 @@ paths:
       summary: 与服务端进行websocket连接,请使用postman测试
       tags:
       - 聊天模块
-  /goods:
+  /goods/{page}/{pageSize}:
     get:
+      parameters:
+      - description: 页数
+        in: path
+        name: page
+        required: true
+        type: integer
+      - description: 一页的大小
+        in: path
+        name: pageSize
+        required: true
+        type: integer
       produces:
       - application/json
       responses:
@@ -304,7 +306,7 @@ paths:
       summary: 获取所有商品
       tags:
       - 商品模块
-  /goods/{page}/{pageSize}:
+  /goods/category/{page}/{pageSize}:
     get:
       parameters:
       - description: 页数
@@ -317,6 +319,11 @@ paths:
         name: pageSize
         required: true
         type: integer
+      - description: 商品分类id
+        in: query
+        name: category
+        required: true
+        type: integer
       produces:
       - application/json
       responses:
@@ -324,7 +331,7 @@ paths:
           description: OK
           schema:
             $ref: '#/definitions/response.Response'
-      summary: 获取所有商品
+      summary: 按分类查找商品并分页显示
       tags:
       - 商品模块
   /goods/create:

+ 4 - 0
trading-go/go.mod

@@ -30,6 +30,8 @@ require (
 	github.com/golang-jwt/jwt v3.2.2+incompatible // indirect
 	github.com/gorilla/websocket v1.5.0 // indirect
 	github.com/hashicorp/hcl v1.0.0 // indirect
+	github.com/jinzhu/inflection v1.0.0 // indirect
+	github.com/jinzhu/now v1.1.5 // indirect
 	github.com/jmoiron/sqlx v1.3.5 // indirect
 	github.com/josharian/intern v1.0.0 // indirect
 	github.com/json-iterator/go v1.1.12 // indirect
@@ -67,5 +69,7 @@ require (
 	gopkg.in/ini.v1 v1.67.0 // indirect
 	gopkg.in/yaml.v2 v2.4.0 // indirect
 	gopkg.in/yaml.v3 v3.0.1 // indirect
+	gorm.io/driver/mysql v1.5.1 // indirect
+	gorm.io/gorm v1.25.4 // indirect
 	sigs.k8s.io/yaml v1.3.0 // indirect
 )

+ 10 - 0
trading-go/go.sum

@@ -114,6 +114,7 @@ github.com/go-playground/validator/v10 v10.14.1/go.mod h1:9iXMNT7sEkjXb0I+enO7QX
 github.com/go-redis/redis/v8 v8.11.5 h1:AcZZR7igkdvfVmQTPnu9WE37LRrO/YrBH5zWyjDC0oI=
 github.com/go-redis/redis/v8 v8.11.5/go.mod h1:gREzHqY1hg6oD9ngVRbLStwAWKhA0FEgq8Jd4h5lpwo=
 github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
+github.com/go-sql-driver/mysql v1.7.0/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI=
 github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI=
 github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU=
@@ -185,6 +186,10 @@ github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
 github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
 github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
 github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
+github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
+github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
+github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
+github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
 github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g=
 github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ=
 github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
@@ -615,6 +620,11 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C
 gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+gorm.io/driver/mysql v1.5.1 h1:WUEH5VF9obL/lTtzjmML/5e6VfFR/788coz2uaVCAZw=
+gorm.io/driver/mysql v1.5.1/go.mod h1:Jo3Xu7mMhCyj8dlrb3WoCaRd1FhsVh+yMXb1jUInf5o=
+gorm.io/gorm v1.25.1/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
+gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
+gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

+ 47 - 7
trading-go/model/appraise.go

@@ -1,18 +1,58 @@
 package model
 
+import "trading-go/common"
+
 type Appraise struct {
-	Id      int64  `db:"id"`
-	GoodsId int64  `db:"goods_id"`
-	BuyerId int64  `db:"buyer_id"`
-	Time    int64  `db:"time"`
+	Id      uint   `db:"id"`
+	GoodsId uint   `db:"goods_id"`
+	BuyerId uint   `db:"buyer_id"`
+	Time    uint   `db:"time"`
 	Content string `db:"content"`
 	Star    int    `db:"star"`
 }
 
 type AppraiseJson struct {
-	GoodsId int64  `json:"goodsId"`
-	BuyerId int64  `json:"buyerId"`
-	Time    int64  `json:"time"`
+	GoodsId uint   `json:"goodsId"`
+	BuyerId uint   `json:"buyerId"`
+	Time    uint   `json:"time"`
 	Content string `json:"content"`
 	Star    int    `json:"star"`
 }
+
+func (j AppraiseJson) Change() Appraise {
+	return Appraise{
+		GoodsId: j.GoodsId,
+		BuyerId: j.BuyerId,
+		Time:    j.Time,
+		Content: j.Content,
+		Star:    j.Star,
+	}
+}
+
+func (a Appraise) Create() error {
+	db := common.DB
+	sqlStr := "INSERT INTO appraises(goods_id, buyer_id, time, content, star) VALUES(:goods_id, :buyer_id, :time, :content, :star)"
+	_, err := db.NamedExec(sqlStr, a)
+	return err
+}
+
+func (a Appraise) Delete() error {
+	db := common.DB
+	sqlStr := "DELETE FROM appraises WHERE id = ?"
+	_, err := db.Exec(sqlStr, a.Id)
+	return err
+}
+
+func (a Appraise) Revise() error {
+	db := common.DB
+	sqlStr := "UPDATE appraises SET time = ?, content = ?, star = ? WHERE id = ?"
+	_, err := db.Exec(sqlStr, a.Time, a.Content, a.Star, a.Id)
+	return err
+}
+
+func (a Appraise) GetOwn() (appraises []Appraise, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM appraises WHERE buyer_id = ?"
+	err = db.Select(&appraises, sqlStr, a.BuyerId)
+	return
+}

+ 46 - 4
trading-go/model/category.go

@@ -1,7 +1,9 @@
 package model
 
+import "trading-go/common"
+
 type Category struct {
-	Id   int64  `db:"id"`
+	Id   uint   `db:"id"`
 	Name string `db:"name"`
 	Pic  string `db:"pic"`
 }
@@ -12,7 +14,47 @@ type CategoryJson struct {
 }
 
 type CategoryOfGoods struct {
-	Id         int64 `db:"id"`
-	GoodsId    int64 `db:"goods_id"`
-	CategoryId int64 `db:"category_id"`
+	Id         uint `db:"id"`
+	GoodsId    uint `db:"goods_id"`
+	CategoryId uint `db:"category_id"`
+}
+
+func (j CategoryJson) Change() Category {
+	return Category{
+		Name: j.Name,
+		Pic:  j.Pic,
+	}
+}
+
+func (c Category) GetAll() (categories []Category, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM categories"
+	err = db.Select(&categories, sqlStr)
+	return
+}
+
+func (c Category) Create() error {
+	db := common.DB
+	sqlStr := "INSERT INTO categories(name, pic) VALUES(:name, :pic)"
+	_, err := db.NamedExec(sqlStr, c)
+	return err
+}
+
+func (c Category) Delete() error {
+	db := common.DB
+	sqlStr := "DELETE FROM categories WHERE id = ?"
+	_, err := db.Exec(sqlStr, c.Id)
+	return err
+}
+
+func (g CategoryOfGoods) Save(id uint, categories []uint) error {
+	db := common.DB
+	sqlStr := "INSERT INTO category_of_goods(goods_id, category_id) VALUES (?, ?)"
+	for _, category := range categories {
+		_, err := db.Exec(sqlStr, id, category)
+		if err != nil {
+			return err
+		}
+	}
+	return nil
 }

+ 144 - 20
trading-go/model/goods.go

@@ -1,44 +1,168 @@
 package model
 
+import (
+	"fmt"
+	"github.com/jmoiron/sqlx"
+	"trading-go/common"
+	"trading-go/response"
+)
+
 type Goods struct {
-	Id        int64  `db:"id"`
-	Pic       Pic    `db:"pic"`
-	OwnerId   int64  `db:"owner_id"`
+	Id        uint   `db:"id"`
+	PicId     uint   `db:"pic_id"`
+	OwnerId   uint   `db:"owner_id"`
 	Desc      string `db:"desc"`
 	Title     string `db:"title"`
-	Price     int64  `db:"price"`
+	Price     uint   `db:"price"`
 	Integrity int    `db:"integrity"`
 	Place     string `db:"place"`
 	State     int    `db:"state"`
 }
 
 type GoodsJson struct {
-	Pic        Pic     `json:"pic"`
-	OwnerId    int64   `json:"ownerId"`
-	Desc       string  `json:"desc"`
-	Title      string  `json:"title"`
-	Price      int64   `json:"price"`
-	Integrity  int     `json:"integrity"`
-	Place      string  `json:"place"`
-	Categories []int64 `json:"categories"`
-	State      int     `json:"state"`
+	PicId      uint   `json:"pic_id"`
+	OwnerId    uint   `json:"ownerId"`
+	Desc       string `json:"desc"`
+	Title      string `json:"title"`
+	Price      uint   `json:"price"`
+	Integrity  int    `json:"integrity"`
+	Place      string `json:"place"`
+	Categories []uint `json:"categories"`
+	State      int    `json:"state"`
 }
 
 type GoodsSurfaceJson struct {
-	Pic       Pic    `json:"pic"`
-	OwnerId   int64  `json:"ownerId"`
+	PicId     uint   `json:"picId"`
+	OwnerId   uint   `json:"ownerId"`
 	Title     string `json:"title"`
-	Price     int64  `json:"price"`
+	Price     uint   `json:"price"`
 	Integrity int    `json:"integrity"`
 	State     int    `json:"state"`
 }
 
 type GoodsSurface struct {
-	Id        int64  `db:"id"`
-	Pic       Pic    `db:"pic"`
-	OwnerId   int64  `db:"owner_id"`
+	Id        uint   `db:"id"`
+	PicId     uint   `db:"pic_id"`
+	OwnerId   uint   `db:"owner_id"`
 	Title     string `db:"title"`
-	Price     int64  `db:"price"`
+	Price     uint   `db:"price"`
 	Integrity int    `db:"integrity"`
 	State     int    `db:"state"`
 }
+
+func (g *GoodsJson) Change() Goods {
+	return Goods{
+		PicId:     g.PicId,
+		OwnerId:   g.OwnerId,
+		Desc:      g.Desc,
+		Title:     g.Title,
+		Price:     g.Price,
+		Integrity: g.Integrity,
+		Place:     g.Place,
+		State:     g.State,
+	}
+}
+
+func (g *Goods) Create() (id uint, err error) {
+	db := common.DB
+	sqlStr := "INSERT INTO goods(pic_id, owner_id, `desc`, title, price, integrity, place, state) VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
+	_, err = db.Exec(sqlStr, g.PicId, g.OwnerId, g.Desc, g.Title, g.Price, g.Integrity, g.Place, g.State)
+	if err != nil {
+		return
+	}
+	sqlStr = "INSERT INTO goods_surfaces(pic_id, owner_id, title, price, integrity, state) VALUES (?, ?, ?, ?, ?, ?)"
+	exec, err := db.Exec(sqlStr, g.PicId, g.OwnerId, g.Title, g.Price, g.Integrity, g.State)
+	if err != nil {
+		return
+	}
+	ids, err := exec.LastInsertId()
+	id = uint(ids)
+	if err != nil {
+		return
+	}
+	return
+}
+
+func (g *Goods) Delete() error {
+	db := common.DB
+	sqlStr := "DELETE FROM goods WHERE id = ?"
+	_, err := db.Exec(sqlStr, g.Id)
+	if err != nil {
+		return err
+	}
+	sqlStr = "DELETE FROM goods_surfaces WHERE id = ?"
+	_, err = db.Exec(sqlStr, g.Id)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+func (g *GoodsSurface) GetPaged(page, pageSize int) (rsp response.PageResponse, err error) {
+	var goods []GoodsSurface
+	db := common.DB
+	sqlStr := "SELECT * FROM goods_surfaces LIMIT ?,?"
+	rsp.Page = page
+	rsp.PageSize = pageSize
+	err = db.Select(&goods, sqlStr, (page-1)*pageSize, pageSize)
+	rsp.Data = goods
+	return
+}
+
+func (g *GoodsSurface) GetCnt() (cnt int, err error) {
+	db := common.DB
+	sqlStr := "SELECT COUNT(1) FROM goods_surfaces"
+	err = db.Get(&cnt, sqlStr)
+	return
+}
+
+func (g *Goods) Revise() error {
+	db := common.DB
+	sqlStr := "UPDATE goods SET pic_id = ?, owner_id = ?, `desc` = ?, title = ?, price = ?, integrity = ?, place = ?, state = ? WHERE id = ?"
+	_, err := db.Exec(sqlStr, g.PicId, g.OwnerId, g.Desc, g.Title, g.Price, g.Integrity, g.Place, g.State, g.Id)
+	return err
+}
+
+func (g *Goods) GetDetail() error {
+	db := common.DB
+	fmt.Println(g.Id)
+	sqlStr := "SELECT * FROM goods WHERE id = ?"
+	err := db.Get(&g, sqlStr, g.Id)
+	return err
+}
+
+func (g *Goods) GetUserGoods() (goods []Goods, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM goods WHERE owner_id = ?"
+	err = db.Select(&goods, sqlStr, g.OwnerId)
+	return
+}
+
+func (g *GoodsSurface) GetCategoryPaged(page, pageSize int, category uint) (rsp response.PageResponse, err error) {
+	db := common.DB
+	var goods []GoodsSurface
+	var goodsIds []uint
+	rsp.Page = page
+	rsp.PageSize = pageSize
+	sqlStr := "SELECT goods_id FROM category_of_goods WHERE category_id = ?"
+	err = db.Select(&goodsIds, sqlStr, category)
+	if err != nil {
+		return
+	}
+	sqlStr = "SELECT * FROM goods_surfaces WHERE id IN (?) LIMIT ?,?"
+	query, args, err := sqlx.In(sqlStr, goodsIds, (page-1)*pageSize, pageSize)
+	if err != nil {
+		return
+	}
+	fmt.Println(query, args)
+	err = db.Select(&goods, query, args...)
+	rsp.Data = goods
+	return
+}
+
+func (g *GoodsSurface) GetCategoryCnt(category uint) (cnt int, err error) {
+	db := common.DB
+	sqlStr := "SELECT COUNT(1) FROM goods_surfaces WHERE id IN (SELECT goods_id FROM category_of_goods WHERE category_id = ?)"
+	err = db.Get(&cnt, sqlStr, category)
+	return
+}

+ 5 - 5
trading-go/model/message.go

@@ -1,9 +1,9 @@
 package model
 
 type Message struct {
-	MsgType int   `json:"msgType"`
-	From    int64 `json:"from"`
-	To      int64 `json:"to"`
-	Time    int64 `json:"time"`
-	Content any   `json:"content"`
+	MsgType int  `json:"msgType"`
+	From    uint `json:"from"`
+	To      uint `json:"to"`
+	Time    uint `json:"time"`
+	Content any  `json:"content"`
 }

+ 59 - 11
trading-go/model/orders.go

@@ -1,22 +1,70 @@
 package model
 
-import "time"
+import (
+	"trading-go/common"
+)
 
 type Order struct {
-	Id      int64  `db:"id"`
-	GoodsId int64  `db:"goods_id"`
-	BuyerId int64  `db:"buyer_id"`
-	Time    int64  `db:"time"`
+	Id      uint   `db:"id"`
+	GoodsId uint   `db:"goods_id"`
+	BuyerId uint   `db:"buyer_id"`
+	Time    uint   `db:"time"`
 	Place   string `db:"place"`
 	Phone   string `db:"phone"`
 	State   int    `db:"state"`
 }
 
 type OrderJson struct {
-	GoodsId int64     `json:"goodsId"`
-	BuyerId int64     `json:"buyerId"`
-	Time    time.Time `json:"time"`
-	Place   string    `json:"place"`
-	Phone   string    `json:"phone"`
-	State   int       `json:"state"`
+	GoodsId uint   `json:"goodsId"`
+	BuyerId uint   `json:"buyerId"`
+	Time    uint   `json:"time"`
+	Place   string `json:"place"`
+	Phone   string `json:"phone"`
+	State   int    `json:"state"`
+}
+
+func (o OrderJson) Change() Order {
+	return Order{
+		GoodsId: o.GoodsId,
+		BuyerId: o.BuyerId,
+		Time:    o.Time,
+		Place:   o.Place,
+		Phone:   o.Phone,
+		State:   o.State,
+	}
+}
+
+func (o Order) GetAll() (orders []Order, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM orders"
+	err = db.Select(&orders, sqlStr)
+	return
+}
+
+func (o Order) GetOwner(ownerId uint) (orders []Order, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM orders WHERE buyer_id = ?"
+	err = db.Select(&orders, sqlStr, ownerId)
+	return
+}
+
+func (o Order) Revise() error {
+	db := common.DB
+	sqlStr := "UPDATE orders SET state = ? WHERE id = ?"
+	_, err := db.Exec(sqlStr, o.State, o.Id)
+	return err
+}
+
+func (o Order) Create() error {
+	db := common.DB
+	sqlStr := "INSERT INTO orders(goods_id, buyer_id, time, place, phone, state) VALUES(:goods_id, :buyer_id, :time, :place, :phone , :state)"
+	_, err := db.NamedExec(sqlStr, o)
+	return err
+}
+
+func (o Order) Delete() error {
+	db := common.DB
+	sqlStr := "DELETE FROM orders WHERE id = ?"
+	_, err := db.Exec(sqlStr)
+	return err
 }

+ 32 - 1
trading-go/model/pic.go

@@ -1,7 +1,38 @@
 package model
 
+import "trading-go/common"
+
 type Pic struct {
-	Id   int64  `db:"id"`
+	Id   uint   `db:"id"`
 	Name string `db:"name"`
 	Url  string `db:"url"`
 }
+
+func (p *Pic) Save() error {
+	db := common.DB
+	sqlStr := "INSERT INTO pics(name, url) VALUES (:name, :url)"
+	exec, err := db.NamedExec(sqlStr, p)
+	if err != nil {
+		return err
+	}
+	id, err := exec.LastInsertId()
+	if err != nil {
+		return err
+	}
+	p.Id = uint(id)
+	return nil
+}
+
+func (p *Pic) GetAll() (pics []Pic, err error) {
+	db := common.DB
+	sqlStr := "SELECT * FROM pics"
+	err = db.Select(&pics, sqlStr)
+	return
+}
+
+func (p *Pic) Delete() error {
+	db := common.DB
+	sqlStr := "DELETE FROM pics WHERE id = ?"
+	_, err := db.Exec(sqlStr)
+	return err
+}

+ 8 - 8
trading-go/model/relation.go

@@ -6,21 +6,21 @@ import (
 )
 
 type Relation struct {
-	Id     int64 `db:"id"`
-	Owner  int64 `db:"owner"`
-	Target int64 `db:"target"`
-	Type   int   `db:"type"`
+	Id     uint `db:"id"`
+	Owner  uint `db:"owner"`
+	Target uint `db:"target"`
+	Type   int  `db:"type"`
 }
 
 type RelationJson struct {
-	Owner  int64 `json:"owner"`
-	Target int64 `json:"target"`
-	Type   int   `json:"type"`
+	Owner  uint `json:"owner"`
+	Target uint `json:"target"`
+	Type   int  `json:"type"`
 }
 
 func (r Relation) Creat() error {
 	db := common.DB
-	sqlStr := "INSERT INTO relations(onwer, target, type) VALUES (:onwer, :target, :type)"
+	sqlStr := "INSERT INTO relations(owner, target, type) VALUES (:onwer, :target, :type)"
 	rows, err := db.NamedExec(sqlStr, r)
 	if err != nil {
 		return err

+ 37 - 0
trading-go/model/table.go

@@ -0,0 +1,37 @@
+package model
+
+import (
+	"fmt"
+	"github.com/spf13/viper"
+	"gorm.io/driver/mysql"
+	"gorm.io/gorm"
+)
+
+func init() {
+	host := viper.GetString("mysql.host")
+	port := viper.GetString("mysql.port")
+	database := viper.GetString("mysql.database")
+	username := viper.GetString("mysql.username")
+	password := viper.GetString("mysql.password")
+	charset := viper.GetString("mysql.charset")
+	dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=%s&parseTime=true",
+		username,
+		password,
+		host,
+		port,
+		database,
+		charset)
+	db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
+	if err != nil {
+		panic(err.Error())
+	}
+	db.AutoMigrate(User{})
+	db.AutoMigrate(Category{})
+	db.AutoMigrate(Pic{})
+	db.AutoMigrate(Appraise{})
+	db.AutoMigrate(GoodsSurface{})
+	db.AutoMigrate(Goods{})
+	db.AutoMigrate(Relation{})
+	db.AutoMigrate(Order{})
+	db.AutoMigrate(CategoryOfGoods{})
+}

+ 1 - 1
trading-go/model/user.go

@@ -7,7 +7,7 @@ import (
 )
 
 type User struct {
-	Uid    int64  `db:"uid"`
+	Uid    uint   `db:"uid"`
 	Vid    string `db:"vid"`
 	Name   string `db:"name"`
 	Avatar string `db:"avatar"`

+ 6 - 1
trading-go/routine/routine.go

@@ -4,6 +4,7 @@ import (
 	"github.com/gin-gonic/gin"
 	swaggerfiles "github.com/swaggo/files"
 	ginSwagger "github.com/swaggo/gin-swagger"
+	"net/http"
 	"trading-go/controller"
 	"trading-go/docs" // 千万不要忘了导入把你上一步生成的docs
 )
@@ -12,6 +13,9 @@ func GetRoutine() *gin.Engine {
 	r := gin.Default()
 	r.Use(controller.Cors)
 
+	// 图片等静态文件
+	r.StaticFS("/pic", http.Dir("./pic"))
+
 	// swagger
 	docs.SwaggerInfo.BasePath = ""
 	r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
@@ -56,7 +60,7 @@ func GetRoutine() *gin.Engine {
 
 	goods := r.Group("goods")
 	{
-		goods.GET("", controller.GetAllGoods)
+		//goods.GET("", controller.GetAllGoods)
 		goods.POST("create", controller.CreatGoods)
 		goods.DELETE("delete/:id", controller.DGoods)
 		goods.GET("/:page/:pageSize", controller.GetGoodsPage)
@@ -65,6 +69,7 @@ func GetRoutine() *gin.Engine {
 		goods.GET("detail/:id", controller.GetGoodDetail)
 		goods.GET("user/:id", controller.GetUserGoods)
 		goods.GET("search/:page/:pageSize", controller.SearchGoods)
+		goods.GET("category/:page/:pageSize", controller.GetGoodsCategory)
 	}
 
 	order := r.Group("order")

+ 2 - 2
trading-go/util/jwt-go.go

@@ -8,11 +8,11 @@ import (
 var jwtKey = []byte("hello223rdwvwdfforl-'dandfdsafdafdsfsmay")
 
 type Claims struct {
-	UserId int64
+	UserId uint
 	jwt.StandardClaims
 }
 
-func CreatToken(uid int64) (string, error) {
+func CreatToken(uid uint) (string, error) {
 	expirationTime := time.Now().Add(31 * 24 * time.Hour)
 	claims := &Claims{
 		UserId: uid,