Prechádzať zdrojové kódy

聊天记录获取相关api

May1145 1 rok pred
rodič
commit
6afe4931fa

+ 176 - 64
trading-go/bin/docs/docs.go

@@ -137,6 +137,41 @@ const docTemplate = `{
                 }
             }
         },
+        "/appraise/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "评论模块"
+                ],
+                "summary": "分页获取评论信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/category": {
             "get": {
                 "consumes": [
@@ -594,69 +629,6 @@ const docTemplate = `{
                 }
             }
         },
-        "/message": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "信息模块"
-                ],
-                "summary": "传入用户id获取用户消息记录",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "用户id",
-                        "name": "uid",
-                        "in": "query",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/response.Response"
-                        }
-                    }
-                }
-            }
-        },
-        "/message/conv": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "信息模块"
-                ],
-                "summary": "传入用户id和聊天对象id获取消息记录",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "用户id",
-                        "name": "uid",
-                        "in": "query",
-                        "required": true
-                    },
-                    {
-                        "type": "integer",
-                        "description": "对象id",
-                        "name": "targetId",
-                        "in": "query",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/response.Response"
-                        }
-                    }
-                }
-            }
-        },
         "/order": {
             "get": {
                 "produces": [
@@ -797,6 +769,41 @@ const docTemplate = `{
                 }
             }
         },
+        "/order/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "订单模块"
+                ],
+                "summary": "分页获取订单",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/pic": {
             "get": {
                 "produces": [
@@ -875,6 +882,41 @@ const docTemplate = `{
                 }
             }
         },
+        "/pic/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "图片模块"
+                ],
+                "summary": "分页获取图片",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/relation/bad": {
             "get": {
                 "produces": [
@@ -992,6 +1034,41 @@ const docTemplate = `{
                 }
             }
         },
+        "/relation/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "用户关系模块"
+                ],
+                "summary": "分页用户关系",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/user/info": {
             "get": {
                 "produces": [
@@ -1103,6 +1180,41 @@ const docTemplate = `{
                     }
                 }
             }
+        },
+        "/user/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "用户模块"
+                ],
+                "summary": "分页用户信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
         }
     },
     "definitions": {
@@ -1319,7 +1431,7 @@ const docTemplate = `{
 // SwaggerInfo holds exported Swagger Info so clients can modify it
 var SwaggerInfo = &swag.Spec{
 	Version:          "1.0",
-	Host:             "127.0.0.1:8084",
+	Host:             "124.222.126.172:8084",
 	BasePath:         "/WeChatTrading/trading-go",
 	Schemes:          []string{},
 	Title:            "二手交易",

+ 176 - 64
trading-go/bin/docs/swagger.json

@@ -11,7 +11,7 @@
         },
         "version": "1.0"
     },
-    "host": "127.0.0.1:8084",
+    "host": "124.222.126.172:8084",
     "basePath": "/WeChatTrading/trading-go",
     "paths": {
         "/appraise/create": {
@@ -130,6 +130,41 @@
                 }
             }
         },
+        "/appraise/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "评论模块"
+                ],
+                "summary": "分页获取评论信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/category": {
             "get": {
                 "consumes": [
@@ -587,69 +622,6 @@
                 }
             }
         },
-        "/message": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "信息模块"
-                ],
-                "summary": "传入用户id获取用户消息记录",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "用户id",
-                        "name": "uid",
-                        "in": "query",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/response.Response"
-                        }
-                    }
-                }
-            }
-        },
-        "/message/conv": {
-            "get": {
-                "produces": [
-                    "application/json"
-                ],
-                "tags": [
-                    "信息模块"
-                ],
-                "summary": "传入用户id和聊天对象id获取消息记录",
-                "parameters": [
-                    {
-                        "type": "integer",
-                        "description": "用户id",
-                        "name": "uid",
-                        "in": "query",
-                        "required": true
-                    },
-                    {
-                        "type": "integer",
-                        "description": "对象id",
-                        "name": "targetId",
-                        "in": "query",
-                        "required": true
-                    }
-                ],
-                "responses": {
-                    "200": {
-                        "description": "OK",
-                        "schema": {
-                            "$ref": "#/definitions/response.Response"
-                        }
-                    }
-                }
-            }
-        },
         "/order": {
             "get": {
                 "produces": [
@@ -790,6 +762,41 @@
                 }
             }
         },
+        "/order/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "订单模块"
+                ],
+                "summary": "分页获取订单",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/pic": {
             "get": {
                 "produces": [
@@ -868,6 +875,41 @@
                 }
             }
         },
+        "/pic/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "图片模块"
+                ],
+                "summary": "分页获取图片",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/relation/bad": {
             "get": {
                 "produces": [
@@ -985,6 +1027,41 @@
                 }
             }
         },
+        "/relation/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "用户关系模块"
+                ],
+                "summary": "分页用户关系",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
+        },
         "/user/info": {
             "get": {
                 "produces": [
@@ -1096,6 +1173,41 @@
                     }
                 }
             }
+        },
+        "/user/{page}/{pageSize}": {
+            "get": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "用户模块"
+                ],
+                "summary": "分页用户信息",
+                "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "OK",
+                        "schema": {
+                            "$ref": "#/definitions/response.Response"
+                        }
+                    }
+                }
+            }
         }
     },
     "definitions": {

+ 104 - 30
trading-go/bin/docs/swagger.yaml

@@ -135,7 +135,7 @@ definitions:
       message:
         type: string
     type: object
-host: 127.0.0.1:8084
+host: 124.222.126.172:8084
 info:
   contact: {}
   description: 一个基于微信小程序的校园二手交易平台的api文档
@@ -146,6 +146,29 @@ info:
   title: 二手交易
   version: "1.0"
 paths:
+  /appraise/{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:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.Response'
+      summary: 分页获取评论信息
+      tags:
+      - 评论模块
   /appraise/create:
     post:
       parameters:
@@ -516,14 +539,8 @@ paths:
       summary: 获取某个用户的所有商品
       tags:
       - 商品模块
-  /message:
+  /order:
     get:
-      parameters:
-      - description: 用户id
-        in: query
-        name: uid
-        required: true
-        type: integer
       produces:
       - application/json
       responses:
@@ -531,20 +548,20 @@ paths:
           description: OK
           schema:
             $ref: '#/definitions/response.Response'
-      summary: 传入用户id获取用户消息记录
+      summary: 获取所有订单
       tags:
-      - 信息模块
-  /message/conv:
+      - 订单模块
+  /order/{page}/{pageSize}:
     get:
       parameters:
-      - description: 用户id
-        in: query
-        name: uid
+      - description: 页数
+        in: path
+        name: page
         required: true
         type: integer
-      - description: 对象id
-        in: query
-        name: targetId
+      - description: 一页的大小
+        in: path
+        name: pageSize
         required: true
         type: integer
       produces:
@@ -554,19 +571,7 @@ paths:
           description: OK
           schema:
             $ref: '#/definitions/response.Response'
-      summary: 传入用户id和聊天对象id获取消息记录
-      tags:
-      - 信息模块
-  /order:
-    get:
-      produces:
-      - application/json
-      responses:
-        "200":
-          description: OK
-          schema:
-            $ref: '#/definitions/response.Response'
-      summary: 获取所有订单
+      summary: 分页获取订单
       tags:
       - 订单模块
   /order/create:
@@ -659,6 +664,29 @@ paths:
       summary: 获取所有图片
       tags:
       - 图片模块
+  /pic/{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:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.Response'
+      summary: 分页获取图片
+      tags:
+      - 图片模块
   /pic/delete/{id}:
     delete:
       parameters:
@@ -697,6 +725,29 @@ paths:
       summary: 上传图片
       tags:
       - 图片模块
+  /relation/{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:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.Response'
+      summary: 分页用户关系
+      tags:
+      - 用户关系模块
   /relation/bad:
     get:
       parameters:
@@ -772,6 +823,29 @@ paths:
       summary: 传入用户id获取用户好友列表
       tags:
       - 用户关系模块
+  /user/{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:
+        "200":
+          description: OK
+          schema:
+            $ref: '#/definitions/response.Response'
+      summary: 分页用户信息
+      tags:
+      - 用户模块
   /user/info:
     get:
       produces:

BIN
trading-go/bin/pic/1693216061Snipaste_2023-08-28_17-11-56.png


BIN
trading-go/bin/trading-go


+ 8 - 4
trading-go/common/database.go

@@ -36,11 +36,15 @@ func initMySQL() {
 }
 
 func initRedis() {
+	addr := viper.GetString("redis.addr")
+	password := viper.GetString("redis.password")
+	db := viper.GetInt("redis.db")
+	poolsize := viper.GetInt("redis.poolsize")
 	rdb := redis.NewClient(&redis.Options{
-		Addr:     viper.GetString("redis.addr"),
-		Password: viper.GetString("redis.password"),
-		DB:       viper.GetInt("redis.db"),
-		PoolSize: viper.GetInt("redis.poolsize"),
+		Addr:     addr,
+		Password: password, // 密码
+		DB:       db,       // 数据库
+		PoolSize: poolsize, // 连接池大小
 	})
 	Redis = rdb
 }

+ 3 - 3
trading-go/config/config.yml

@@ -8,9 +8,9 @@ mysql:
   password: Cherry1145
   charset: utf8
 redis:
-  addr: localhost:6379
-  password:
-  db: 0
+  addr: "localhost:6379"
+  password: ""
+  db: 1
   poolsize: 20
 time:
   time: 2023-8-16

+ 55 - 20
trading-go/controller/chatcontroller.go

@@ -36,17 +36,23 @@ func send(conn *websocket.Conn, uid uint) {
 	}()
 	for {
 		data := <-pip
-		data.Save()
-		msg, err := json.Marshal(data)
+		err := data.Save()
 		if err != nil {
-			fmt.Println("link closed")
+			fmt.Println(err.Error())
 			break
 		}
-		err = conn.WriteMessage(data.MsgType, msg)
+		msg, err := json.Marshal(data)
 		if err != nil {
-			fmt.Println(err.Error())
+			fmt.Println("link closed")
 			break
 		}
+		if data.Time == 1 {
+			err = conn.WriteMessage(data.MsgType, msg)
+			if err != nil {
+				fmt.Println(err.Error())
+				break
+			}
+		}
 	}
 }
 
@@ -62,7 +68,11 @@ func reception(conn *websocket.Conn, uid uint) {
 			fmt.Println(err.Error())
 			break
 		}
-		msg.Save()
+		err = msg.Save()
+		if err != nil {
+			fmt.Println(err.Error())
+			break
+		}
 		if v, ok := Conns[msg.To]; ok {
 			v.pip <- &msg
 		} else {
@@ -86,7 +96,7 @@ func broadcast(data model.Message) {
 	}
 }
 
-func heartBeat(uid uint) {
+func heartBeat(conn *websocket.Conn, uid uint) {
 	defer func() {
 		delete(Conns, uid)
 	}()
@@ -98,12 +108,17 @@ func heartBeat(uid uint) {
 			Time:    uint(time.Now().Unix()),
 			Content: "alive",
 		}
-		if v, ok := Conns[msg.To]; ok {
-			v.pip <- &msg
-			time.Sleep(time.Second)
-		} else {
-
+		data, err := json.Marshal(msg)
+		if err != nil {
+			fmt.Println(err.Error())
+			break
+		}
+		err = conn.WriteMessage(websocket.TextMessage, data)
+		if err != nil {
+			fmt.Println(err.Error())
+			break
 		}
+		time.Sleep(time.Second * 5)
 	}
 }
 
@@ -125,7 +140,7 @@ func Chat(w http.ResponseWriter, rq *http.Request, uid uint) {
 
 	go send(conn, uid)
 	go reception(conn, uid)
-	go heartBeat(uid)
+	go heartBeat(conn, uid)
 
 	response.Success(w, "success", nil)
 }
@@ -148,42 +163,62 @@ func LinkToServer(c *gin.Context) {
 // @Tags 聊天模块
 // @Summary 获取未过期且来源为特定用户的聊天记录
 // @Success 200 {object} response.Response
+// @Param page path int true "页数"
+// @Param pageSize path int true "一页的大小"
 // @Param uid query string true "用户id"
-// @Router /chat/from [get]
+// @Router /chat/from/{page}/{pageSize} [get]
 func GetMsgFromPaged(c *gin.Context) {
 	id := c.Query("uid")
+	p := c.Param("page")
+	pS := c.Param("pageSize")
+	page, err := strconv.Atoi(p)
+	pageSize, err := strconv.Atoi(pS)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
 	uid, err := strconv.ParseUint(id, 10, 64)
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	msgs, err := model.Message{}.GetFrom(uint(uid))
+	rsp, err := model.Message{}.GetFrom(uint(uid), page, pageSize)
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)
 		return
 	}
-	response.Success(c.Writer, "success", msgs)
+	response.Success(c.Writer, "success", rsp)
 }
 
 // GetMsgToPaged
 // @Tags 聊天模块
 // @Summary 获取未过期且目标为特定用户的聊天记录
-// @Success 200 {object} response.Response
+// @Param page path int true "页数"
+// @Param pageSize path int true "一页的大小"
 // @Param uid query string true "用户id"
-// @Router /chat/to [get]
+// @Success 200 {object} response.Response
+// @Router /chat/to/{page}/{pageSize} [get]
 func GetMsgToPaged(c *gin.Context) {
 	id := c.Query("uid")
+	p := c.Param("page")
+	pS := c.Param("pageSize")
+	page, err := strconv.Atoi(p)
+	pageSize, err := strconv.Atoi(pS)
+	if err != nil {
+		response.Fail(c.Writer, err.Error(), 500)
+		return
+	}
 	uid, err := strconv.ParseUint(id, 10, 64)
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	msgs, err := model.Message{}.GetTo(uint(uid))
+	rsp, err := model.Message{}.GetTo(uint(uid), page, pageSize)
 	if err != nil {
 		response.Fail(c.Writer, err.Error(), 500)
 		return
 	}
-	response.Success(c.Writer, "success", msgs)
+	response.Success(c.Writer, "success", rsp)
 }

+ 31 - 3
trading-go/docs/docs.go

@@ -271,13 +271,27 @@ const docTemplate = `{
                 }
             }
         },
-        "/chat/from": {
+        "/chat/from/{page}/{pageSize}": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
                 "summary": "获取未过期且来源为特定用户的聊天记录",
                 "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
                     {
                         "type": "string",
                         "description": "用户id",
@@ -296,13 +310,27 @@ const docTemplate = `{
                 }
             }
         },
-        "/chat/to": {
+        "/chat/to/{page}/{pageSize}": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
                 "summary": "获取未过期且目标为特定用户的聊天记录",
                 "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
                     {
                         "type": "string",
                         "description": "用户id",
@@ -1431,7 +1459,7 @@ const docTemplate = `{
 // SwaggerInfo holds exported Swagger Info so clients can modify it
 var SwaggerInfo = &swag.Spec{
 	Version:          "1.0",
-	Host:             "127.0.0.1:8084",
+	Host:             "192.168.31.28:8084",
 	BasePath:         "/WeChatTrading/trading-go",
 	Schemes:          []string{},
 	Title:            "二手交易",

+ 31 - 3
trading-go/docs/swagger.json

@@ -11,7 +11,7 @@
         },
         "version": "1.0"
     },
-    "host": "127.0.0.1:8084",
+    "host": "192.168.31.28:8084",
     "basePath": "/WeChatTrading/trading-go",
     "paths": {
         "/appraise/create": {
@@ -264,13 +264,27 @@
                 }
             }
         },
-        "/chat/from": {
+        "/chat/from/{page}/{pageSize}": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
                 "summary": "获取未过期且来源为特定用户的聊天记录",
                 "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
                     {
                         "type": "string",
                         "description": "用户id",
@@ -289,13 +303,27 @@
                 }
             }
         },
-        "/chat/to": {
+        "/chat/to/{page}/{pageSize}": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
                 "summary": "获取未过期且目标为特定用户的聊天记录",
                 "parameters": [
+                    {
+                        "type": "integer",
+                        "description": "页数",
+                        "name": "page",
+                        "in": "path",
+                        "required": true
+                    },
+                    {
+                        "type": "integer",
+                        "description": "一页的大小",
+                        "name": "pageSize",
+                        "in": "path",
+                        "required": true
+                    },
                     {
                         "type": "string",
                         "description": "用户id",

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

@@ -135,7 +135,7 @@ definitions:
       message:
         type: string
     type: object
-host: 127.0.0.1:8084
+host: 192.168.31.28:8084
 info:
   contact: {}
   description: 一个基于微信小程序的校园二手交易平台的api文档
@@ -306,9 +306,19 @@ paths:
       summary: 与服务端进行websocket连接,请使用postman测试
       tags:
       - 聊天模块
-  /chat/from:
+  /chat/from/{page}/{pageSize}:
     get:
       parameters:
+      - description: 页数
+        in: path
+        name: page
+        required: true
+        type: integer
+      - description: 一页的大小
+        in: path
+        name: pageSize
+        required: true
+        type: integer
       - description: 用户id
         in: query
         name: uid
@@ -322,9 +332,19 @@ paths:
       summary: 获取未过期且来源为特定用户的聊天记录
       tags:
       - 聊天模块
-  /chat/to:
+  /chat/to/{page}/{pageSize}:
     get:
       parameters:
+      - description: 页数
+        in: path
+        name: page
+        required: true
+        type: integer
+      - description: 一页的大小
+        in: path
+        name: pageSize
+        required: true
+        type: integer
       - description: 用户id
         in: query
         name: uid

+ 1 - 1
trading-go/main.go

@@ -14,7 +14,7 @@ import (
 // @license.name Apache 2.0
 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html
 
-// @host 127.0.0.1:8084
+// @host 192.168.31.28:8084
 // @BasePath /WeChatTrading/trading-go
 func main() {
 	r := routine.GetRoutine()

+ 81 - 11
trading-go/model/message.go

@@ -2,9 +2,11 @@ package model
 
 import (
 	"context"
+	"encoding/json"
 	"fmt"
 	"time"
 	"trading-go/common"
+	"trading-go/response"
 )
 
 type Message struct {
@@ -15,30 +17,98 @@ type Message struct {
 	Content any  `json:"content"`
 }
 
-func (m Message) Save() {
+var fromIndex map[uint]string
+var toIndex map[uint]string
+
+func init() {
+	fromIndex = make(map[uint]string)
+	toIndex = make(map[uint]string)
+}
+
+func (m Message) Save() error {
 	rds := common.Redis
-	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
+	jsonData, err := json.Marshal(m)
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
 	defer cancel()
+
 	key := fmt.Sprintf("%d:%d:%d", m.From, m.To, m.Time)
-	rds.Set(ctx, key, m, time.Second*60*60*24*30)
+	_, err = rds.Set(ctx, key, jsonData, time.Second*60*60*24*30).Result()
+	if err != nil {
+		return err
+	}
+	return err
 }
 
-func (m Message) GetFrom(uid uint) (ms []Message, err error) {
+func (m Message) GetFrom(uid uint, page, pageSize int) (ms response.PageResponse, err error) {
+	var mess []Message
+	if page == 1 {
+		fromIndex[uid] = "0"
+	}
 	rds := common.Redis
-	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
 	defer cancel()
 	key := fmt.Sprintf("%d:*", uid)
-	result, err := rds.Do(ctx, "MGET", key).Result()
-	ms = result.([]Message)
+	result, err := rds.Do(ctx, "scan", fromIndex[uid], "match", key, "count", pageSize).Result()
+	if err != nil {
+		return
+	}
+	rs := result.([]interface{})
+	index := rs[0].(string)
+	if index != "0" {
+		fromIndex[uid] = index
+		ms.HNext = true
+	}
+	keys := rs[1].([]interface{})
+	for i := 0; i < len(keys); i++ {
+		value, err := rds.Get(ctx, keys[i].(string)).Result()
+		if err != nil {
+			break
+		}
+		err = json.Unmarshal([]byte(value), &m)
+		if err != nil {
+			break
+		}
+		mess = append(mess, m)
+	}
+	ms.Data = mess
+	ms.PageSize = pageSize
+	ms.Page = page
 	return
 }
 
-func (m Message) GetTo(uid uint) (ms []Message, err error) {
+func (m Message) GetTo(uid uint, page, pageSize int) (ms response.PageResponse, err error) {
+	var mess []Message
+	if page == 1 {
+		toIndex[uid] = "0"
+	}
 	rds := common.Redis
-	ctx, cancel := context.WithTimeout(context.Background(), 500*time.Millisecond)
+	ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
 	defer cancel()
 	key := fmt.Sprintf("*:%d:*", uid)
-	result, err := rds.Do(ctx, "MGET", key).Result()
-	ms = result.([]Message)
+	result, err := rds.Do(ctx, "scan", toIndex[uid], "match", key, "count", pageSize).Result()
+	if err != nil {
+		return
+	}
+	rs := result.([]interface{})
+	index := rs[0].(string)
+	if index != "0" {
+		toIndex[uid] = index
+		ms.HNext = true
+	}
+	keys := rs[1].([]interface{})
+	for i := 0; i < len(keys); i++ {
+		value, err := rds.Get(ctx, keys[i].(string)).Result()
+		if err != nil {
+			break
+		}
+		err = json.Unmarshal([]byte(value), &m)
+		if err != nil {
+			break
+		}
+		mess = append(mess, m)
+	}
+	ms.Data = mess
+	ms.PageSize = pageSize
+	ms.Page = page
 	return
 }

BIN
trading-go/pics/1694494659R-C.jpg


+ 2 - 2
trading-go/routine/routine.go

@@ -32,8 +32,8 @@ func GetRoutine() *gin.Engine {
 	chat := r.Group("chat")
 	{
 		chat.GET("", controller.LinkToServer)
-		chat.GET("from", controller.GetMsgFromPaged)
-		chat.GET("to", controller.GetMsgToPaged)
+		chat.GET("from/:page/:pageSize", controller.GetMsgFromPaged)
+		chat.GET("to/:page/:pageSize", controller.GetMsgToPaged)
 	}
 	relation := r.Group("relation")
 	{