ソースを参照

<perf>:增加了为商品上传多个图片的接口

May1145 1 年間 前
コミット
ab08ec9e67
65 ファイル変更133 行追加83 行削除
  1. 38 29
      trading-go/controller/chatcontroller.go
  2. 29 5
      trading-go/controller/goodscontroller.go
  3. 10 3
      trading-go/docs/docs.go
  4. 10 3
      trading-go/docs/swagger.json
  5. 8 3
      trading-go/docs/swagger.yaml
  6. 2 2
      trading-go/main.go
  7. 3 3
      trading-go/model/goods.go
  8. 7 2
      trading-go/model/message.go
  9. 26 33
      trading-go/model/table.go
  10. BIN
      trading-go/pics/1698476053aWZd7PE7nICad85dedb14362dc3a251c6c85705ec495.jpg
  11. BIN
      trading-go/pics/1698752652MF3qSSC7MzFjb1493fda534929a5b5d05f80a8cf3d16.jpg
  12. BIN
      trading-go/pics/1698753512AiD8PaNrvqsDb1493fda534929a5b5d05f80a8cf3d16.jpg
  13. BIN
      trading-go/pics/1698845281tmp_31510c11e3073fe31c4ee963558f5f954ba91a124775b40c.jpg
  14. BIN
      trading-go/pics/1698845379tmp_2f7cea566577915f03cb307d0540904770f938500a6377ae.jpg
  15. BIN
      trading-go/pics/1698845408tmp_a0cec4ce123ef00c158d0da1f6fe11d86e6ccb263bfe6e8d.jpg
  16. BIN
      trading-go/pics/1698845418tmp_af79c23e356fad52c9194a33033ef7f168a710b7a3cc19c7.jpg
  17. BIN
      trading-go/pics/1698845498tmp_ee023136c58602bb4ff2d75a9b82931a3c72b931c54ef941.jpg
  18. BIN
      trading-go/pics/1698845584tmp_69fe84d4b7b444512c31c8693e95336113d42d50aaca0699.jpg
  19. BIN
      trading-go/pics/1698846108tmp_c0bcb90fd9ef93e065c22b977d7bc8aea17a1ac1e8393c21.jpg
  20. BIN
      trading-go/pics/1699175056BvtgC8vv8gSzd85dedb14362dc3a251c6c85705ec495.jpg
  21. BIN
      trading-go/pics/1699379236UMWxsQPiGipJb1493fda534929a5b5d05f80a8cf3d16.jpg
  22. BIN
      trading-go/pics/16993792564VwCgGljHv72b1493fda534929a5b5d05f80a8cf3d16.jpg
  23. BIN
      trading-go/pics/1699379298Q9wKiV6pwJWQb1493fda534929a5b5d05f80a8cf3d16.jpg
  24. BIN
      trading-go/pics/1699379379PHHZ05aCWJFzdce75ebb26860c9184474d8244e28d16.png
  25. BIN
      trading-go/pics/1699379466JZV4SlIiQXvtb1493fda534929a5b5d05f80a8cf3d16.jpg
  26. BIN
      trading-go/pics/16993794898oKJ95NJEsbab1493fda534929a5b5d05f80a8cf3d16.jpg
  27. BIN
      trading-go/pics/16993794935ty3B2H5X3Bmdce75ebb26860c9184474d8244e28d16.png
  28. BIN
      trading-go/pics/1699379550IZYTYrqt06SLb1493fda534929a5b5d05f80a8cf3d16.jpg
  29. BIN
      trading-go/pics/16993795680m8uW98B2zfyb1493fda534929a5b5d05f80a8cf3d16.jpg
  30. BIN
      trading-go/pics/1699379608gJefzz5qUT66b1493fda534929a5b5d05f80a8cf3d16.jpg
  31. BIN
      trading-go/pics/16993796119oiRGyv8ZJCydce75ebb26860c9184474d8244e28d16.png
  32. BIN
      trading-go/pics/1699379613yT0RetLuz33T7baafd97122013df4eefc138a9d491e4.png
  33. BIN
      trading-go/pics/1699379672CnNaaJF3YcLeb1493fda534929a5b5d05f80a8cf3d16.jpg
  34. BIN
      trading-go/pics/1699379674ratvWnFOC9vPdce75ebb26860c9184474d8244e28d16.png
  35. BIN
      trading-go/pics/1699379676RMOFWe5Byq947baafd97122013df4eefc138a9d491e4.png
  36. BIN
      trading-go/pics/1699379751qAqzwUA2PA5cb1493fda534929a5b5d05f80a8cf3d16.jpg
  37. BIN
      trading-go/pics/1699379788EG6q1cjspfrGb432cdf9781144598ab25ee646cd049d.jpg
  38. BIN
      trading-go/pics/169937981339pnnWLwtUrtdce75ebb26860c9184474d8244e28d16.png
  39. BIN
      trading-go/pics/1699381222EFHkA4BUioDyb1493fda534929a5b5d05f80a8cf3d16.jpg
  40. BIN
      trading-go/pics/16993821607EVsrcizBfSTb1493fda534929a5b5d05f80a8cf3d16.jpg
  41. BIN
      trading-go/pics/1699382199cc45G808GUT8b1493fda534929a5b5d05f80a8cf3d16.jpg
  42. BIN
      trading-go/pics/1699382296S6Uu2diSpWkHb1493fda534929a5b5d05f80a8cf3d16.jpg
  43. BIN
      trading-go/pics/1699382571CXZVd9rNqgPAb1493fda534929a5b5d05f80a8cf3d16.jpg
  44. BIN
      trading-go/pics/1699382666EuwAd5QVrvHZb1493fda534929a5b5d05f80a8cf3d16.jpg
  45. BIN
      trading-go/pics/1699382681Pn8FxS8qyQ09b1493fda534929a5b5d05f80a8cf3d16.jpg
  46. BIN
      trading-go/pics/1699382734DyGE8MNb6jlIb1493fda534929a5b5d05f80a8cf3d16.jpg
  47. BIN
      trading-go/pics/1699449524Qijb0Nylwcjv3fe18ddeee3f922fde4ea74ae229e235.jpg
  48. BIN
      trading-go/pics/1699450042EKRxNaHJGEJHdce75ebb26860c9184474d8244e28d16.png
  49. BIN
      trading-go/pics/1699450079vDMN0qnbpNyTdce75ebb26860c9184474d8244e28d16.png
  50. BIN
      trading-go/pics/1699451535SuxOmjisW2tkd85dedb14362dc3a251c6c85705ec495.jpg
  51. BIN
      trading-go/pics/1702540218QWS0sjmdtMywcb800b0e59cd22f2a10309329be957a9.jpg
  52. BIN
      trading-go/pics/1702540821sZwY77rQFtM2dce75ebb26860c9184474d8244e28d16.png
  53. BIN
      trading-go/pics/17025409532eMSafToj8gudce75ebb26860c9184474d8244e28d16.png
  54. BIN
      trading-go/pics/1702541132uT2BCMgiZA0v7baafd97122013df4eefc138a9d491e4.png
  55. BIN
      trading-go/pics/1702541386VRlRuBCi9b0qdce75ebb26860c9184474d8244e28d16.png
  56. BIN
      trading-go/pics/1702542127wVeSqPyrviJUdce75ebb26860c9184474d8244e28d16.png
  57. BIN
      trading-go/pics/1702542233WjAPxDBg44wvdce75ebb26860c9184474d8244e28d16.png
  58. BIN
      trading-go/pics/17025422755pRxydltjb99dce75ebb26860c9184474d8244e28d16.png
  59. BIN
      trading-go/pics/17025423420kg8E4hkvczOdce75ebb26860c9184474d8244e28d16.png
  60. BIN
      trading-go/pics/1702542562gTfCcjXqQ2Zydce75ebb26860c9184474d8244e28d16.png
  61. BIN
      trading-go/pics/170254528518oQnJKgKLqAdce75ebb26860c9184474d8244e28d16.png
  62. BIN
      trading-go/pics/1702545454z1REibHMQiA7dce75ebb26860c9184474d8244e28d16.png
  63. BIN
      trading-go/pics/1702545527aav1gLONEjOUdce75ebb26860c9184474d8244e28d16.png
  64. BIN
      trading-go/pics/1702545650hhYlNXcydp3vdce75ebb26860c9184474d8244e28d16.png
  65. BIN
      trading-go/pics/1702545696WpBAYlipKjAcdce75ebb26860c9184474d8244e28d16.png

+ 38 - 29
trading-go/controller/chatcontroller.go

@@ -7,6 +7,7 @@ import (
 	"github.com/gorilla/websocket"
 	"net/http"
 	"strconv"
+	"time"
 	"trading-go/model"
 	"trading-go/response"
 )
@@ -104,31 +105,31 @@ func reception(conn *websocket.Conn, uid uint) {
 //	}
 //}
 
-//func heartBeat(conn *websocket.Conn, uid uint) {
-//	defer func() {
-//		delete(Conns, uid)
-//	}()
-//	for {
-//		msg := model.Message{
-//			MsgType: 4,
-//			From:    0,
-//			To:      uid,
-//			Time:    uint(time.Now().Unix()),
-//			Content: "alive",
-//		}
-//		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)
-//	}
-//}
+func heartBeat(conn *websocket.Conn, uid uint) {
+	defer func() {
+		delete(Conns, uid)
+	}()
+	for {
+		msg := model.Message{
+			MsgType: 4,
+			From:    0,
+			To:      uid,
+			Time:    uint(time.Now().Unix()),
+			Content: "alive",
+		}
+		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)
+	}
+}
 
 func Chat(w http.ResponseWriter, rq *http.Request, uid uint) {
 	// 升级为websocket
@@ -148,7 +149,7 @@ func Chat(w http.ResponseWriter, rq *http.Request, uid uint) {
 
 	go send(conn, uid)
 	go reception(conn, uid)
-	//go heartBeat(conn, uid)
+	go heartBeat(conn, uid)
 
 	response.Success(w, "success", nil)
 }
@@ -233,10 +234,11 @@ func GetMsgToPaged(c *gin.Context) {
 
 // GetMsg
 // @Tags 聊天模块
-// @Summary 获取与特定用户相关的所有聊天记录
+// @Summary 获取与特定两个用户之间的所有聊天记录
 // @Param uid query string true "用户id"
+// @Param target query string true "对象id"
 // @Success 200 {object} response.Response
-// @Router /chat/msg/ [get]
+// @Router /chat/msg [get]
 func GetMsg(c *gin.Context) {
 	var ms model.Message
 	id := c.Query("uid")
@@ -246,7 +248,14 @@ func GetMsg(c *gin.Context) {
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
-	msgs, err := ms.GetMsg(uint(uid))
+	t := c.Query("target")
+	target, err := strconv.ParseUint(t, 10, 64)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	msgs, err := ms.GetMsg(uint(uid), uint(target))
 	if err != nil {
 		msg := err.Error()
 		response.Fail(c.Writer, msg, 500)

+ 29 - 5
trading-go/controller/goodscontroller.go

@@ -1,6 +1,7 @@
 package controller
 
 import (
+	"fmt"
 	"github.com/gin-gonic/gin"
 	"strconv"
 	"time"
@@ -45,6 +46,7 @@ func CreatGoods(c *gin.Context) {
 		response.Fail(c.Writer, msg, 500)
 		return
 	}
+	fmt.Println(goodsJson)
 	goods := goodsJson.Change()
 	id, err := goods.Create()
 	go util.NewItem(id, uint(time.Now().Unix()), goodsJson.Title, goodsJson.Desc)
@@ -68,6 +70,7 @@ func CreatGoods(c *gin.Context) {
 // @Router /goods/delete/{id} [delete]
 func DGoods(c *gin.Context) {
 	var goods model.Goods
+	var pic model.Pic
 	ids := c.Param("id")
 	id, err := strconv.Atoi(ids)
 
@@ -78,7 +81,19 @@ func DGoods(c *gin.Context) {
 		return
 	}
 	goods.Id = uint(id)
+	pic.Id = uint(id)
 	err = goods.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	err = pic.Delete()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	go util.DelIndex(goods.Id)
 	if err != nil {
 		msg := err.Error()
@@ -161,6 +176,7 @@ func GetRecommend(c *gin.Context) {
 // @Router /goods/revise [post]
 func ReviseGoods(c *gin.Context) {
 	var goods model.Goods
+	var pic model.Pic
 	err := c.ShouldBindJSON(&goods)
 	if err != nil {
 		msg := err.Error()
@@ -168,6 +184,19 @@ func ReviseGoods(c *gin.Context) {
 		return
 	}
 	err = goods.Revise()
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
+	pic.Id = goods.Id
+	err = pic.Delete()
+	err = pic.Save(pic.Id, goods.Pic)
+	if err != nil {
+		msg := err.Error()
+		response.Fail(c.Writer, msg, 500)
+		return
+	}
 	go func() {
 		util.DelIndex(goods.Id)
 		util.NewIndex(goods.Id, goods.Desc+goods.Title)
@@ -176,11 +205,6 @@ func ReviseGoods(c *gin.Context) {
 		util.DelItem(goods.Id)
 		util.NewItem(goods.Id, uint(time.Now().Unix()), goods.Title, goods.Desc)
 	}()
-	if err != nil {
-		msg := err.Error()
-		response.Fail(c.Writer, msg, 500)
-		return
-	}
 	response.Success(c.Writer, "success", nil)
 }
 

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

@@ -342,12 +342,12 @@ const docTemplate = `{
                 }
             }
         },
-        "/chat/msg/": {
+        "/chat/msg": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
-                "summary": "获取与特定用户相关的所有聊天记录",
+                "summary": "获取与特定两个用户之间的所有聊天记录",
                 "parameters": [
                     {
                         "type": "string",
@@ -355,6 +355,13 @@ const docTemplate = `{
                         "name": "uid",
                         "in": "query",
                         "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "对象id",
+                        "name": "target",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {
@@ -1604,7 +1611,7 @@ const docTemplate = `{
 // SwaggerInfo holds exported Swagger Info so clients can modify it
 var SwaggerInfo = &swag.Spec{
 	Version:          "1.0",
-	Host:             "192.168.31.30:8084",
+	Host:             "192.168.31.27:8084",
 	BasePath:         "/WeChatTrading/trading-go",
 	Schemes:          []string{},
 	Title:            "二手交易",

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

@@ -11,7 +11,7 @@
         },
         "version": "1.0"
     },
-    "host": "192.168.31.30:8084",
+    "host": "192.168.31.27:8084",
     "basePath": "/WeChatTrading/trading-go",
     "paths": {
         "/appraise/create": {
@@ -335,12 +335,12 @@
                 }
             }
         },
-        "/chat/msg/": {
+        "/chat/msg": {
             "get": {
                 "tags": [
                     "聊天模块"
                 ],
-                "summary": "获取与特定用户相关的所有聊天记录",
+                "summary": "获取与特定两个用户之间的所有聊天记录",
                 "parameters": [
                     {
                         "type": "string",
@@ -348,6 +348,13 @@
                         "name": "uid",
                         "in": "query",
                         "required": true
+                    },
+                    {
+                        "type": "string",
+                        "description": "对象id",
+                        "name": "target",
+                        "in": "query",
+                        "required": true
                     }
                 ],
                 "responses": {

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

@@ -146,7 +146,7 @@ definitions:
       message:
         type: string
     type: object
-host: 192.168.31.30:8084
+host: 192.168.31.27:8084
 info:
   contact: {}
   description: 一个基于微信小程序的校园二手交易平台的api文档
@@ -364,7 +364,7 @@ paths:
       summary: 获取与特定用户相关的最后一条聊天记录
       tags:
       - 聊天模块
-  /chat/msg/:
+  /chat/msg:
     get:
       parameters:
       - description: 用户id
@@ -372,12 +372,17 @@ paths:
         name: uid
         required: true
         type: string
+      - description: 对象id
+        in: query
+        name: target
+        required: true
+        type: string
       responses:
         "200":
           description: OK
           schema:
             $ref: '#/definitions/response.Response'
-      summary: 获取与特定用户相关的所有聊天记录
+      summary: 获取与特定两个用户之间的所有聊天记录
       tags:
       - 聊天模块
   /chat/to/{page}/{pageSize}:

+ 2 - 2
trading-go/main.go

@@ -15,12 +15,12 @@ import (
 // @license.name Apache 2.0
 // @license.url http://www.apache.org/licenses/LICENSE-2.0.html
 
-// @host 192.168.31.30:8084
+// @host 192.168.31.27:8084
 // @BasePath /WeChatTrading/trading-go
 func main() {
 
 	r := routine.GetRoutine()
 	port := viper.GetString("web.port")
-	fmt.Println("[api文档] =====>>> http://124.222.126.172:8084/swagger/index.html#/")
+	fmt.Println("[api文档] =====>>> http://192.168.31.27:8084/swagger/index.html#/")
 	r.Run(port)
 }

+ 3 - 3
trading-go/model/goods.go

@@ -114,13 +114,13 @@ func (g *GoodsSurface) GetCnt() (cnt int, err error) {
 
 func (g *Goods) Revise() error {
 	db := common.DB
-	sqlStr := "UPDATE goods SET pic = ?, owner_id = ?, `desc` = ?, title = ?, price = ?, place = ?, state = ? WHERE id = ?"
-	_, err := db.Exec(sqlStr, g.Pic, g.OwnerId, g.Desc, g.Title, g.Price, g.Place, g.State, g.Id)
+	sqlStr := "UPDATE goods SET owner_id = ?, `desc` = ?, title = ?, price = ?, place = ?, state = ? WHERE id = ?"
+	_, err := db.Exec(sqlStr, g.OwnerId, g.Desc, g.Title, g.Price, g.Place, g.State, g.Id)
 	if err != nil {
 		return err
 	}
 	sqlStr = "UPDATE goods_surfaces SET pic = ?, owner_id = ?, title = ?, price = ?, state = ? WHERE id = ?"
-	_, err = db.Exec(sqlStr, g.Pic, g.OwnerId, g.Title, g.Price, g.State, g.Id)
+	_, err = db.Exec(sqlStr, g.Pic[0], g.OwnerId, g.Title, g.Price, g.State, g.Id)
 	return err
 }
 

+ 7 - 2
trading-go/model/message.go

@@ -77,7 +77,7 @@ func (m Message) GetFrom(uid uint, page, pageSize int) (ms response.PageResponse
 	return
 }
 
-func (m Message) GetMsg(uid uint) (ms []Message, err error) {
+func (m Message) GetMsg(uid, target uint) (ms []Message, err error) {
 	mFrom, err := m.GetFrom(uid, 1, 10000000)
 	if err != nil {
 		return nil, err
@@ -87,7 +87,12 @@ func (m Message) GetMsg(uid uint) (ms []Message, err error) {
 		return nil, err
 	}
 	s1, s2 := mFrom.Data.([]Message), mTo.Data.([]Message)
-	ms = append(s1, s2...)
+	msgs := append(s1, s2...)
+	for _, msg := range msgs {
+		if msg.To == target || msg.From == target {
+			ms = append(ms, msg)
+		}
+	}
 	return ms, nil
 }
 

+ 26 - 33
trading-go/model/table.go

@@ -1,37 +1,30 @@
 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{})
+	//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{})
 }

BIN
trading-go/pics/1698476053aWZd7PE7nICad85dedb14362dc3a251c6c85705ec495.jpg


BIN
trading-go/pics/1698752652MF3qSSC7MzFjb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1698753512AiD8PaNrvqsDb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1698845281tmp_31510c11e3073fe31c4ee963558f5f954ba91a124775b40c.jpg


BIN
trading-go/pics/1698845379tmp_2f7cea566577915f03cb307d0540904770f938500a6377ae.jpg


BIN
trading-go/pics/1698845408tmp_a0cec4ce123ef00c158d0da1f6fe11d86e6ccb263bfe6e8d.jpg


BIN
trading-go/pics/1698845418tmp_af79c23e356fad52c9194a33033ef7f168a710b7a3cc19c7.jpg


BIN
trading-go/pics/1698845498tmp_ee023136c58602bb4ff2d75a9b82931a3c72b931c54ef941.jpg


BIN
trading-go/pics/1698845584tmp_69fe84d4b7b444512c31c8693e95336113d42d50aaca0699.jpg


BIN
trading-go/pics/1698846108tmp_c0bcb90fd9ef93e065c22b977d7bc8aea17a1ac1e8393c21.jpg


BIN
trading-go/pics/1699175056BvtgC8vv8gSzd85dedb14362dc3a251c6c85705ec495.jpg


BIN
trading-go/pics/1699379236UMWxsQPiGipJb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993792564VwCgGljHv72b1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699379298Q9wKiV6pwJWQb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699379379PHHZ05aCWJFzdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699379466JZV4SlIiQXvtb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993794898oKJ95NJEsbab1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993794935ty3B2H5X3Bmdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699379550IZYTYrqt06SLb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993795680m8uW98B2zfyb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699379608gJefzz5qUT66b1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993796119oiRGyv8ZJCydce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699379613yT0RetLuz33T7baafd97122013df4eefc138a9d491e4.png


BIN
trading-go/pics/1699379672CnNaaJF3YcLeb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699379674ratvWnFOC9vPdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699379676RMOFWe5Byq947baafd97122013df4eefc138a9d491e4.png


BIN
trading-go/pics/1699379751qAqzwUA2PA5cb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699379788EG6q1cjspfrGb432cdf9781144598ab25ee646cd049d.jpg


BIN
trading-go/pics/169937981339pnnWLwtUrtdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699381222EFHkA4BUioDyb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/16993821607EVsrcizBfSTb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382199cc45G808GUT8b1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382296S6Uu2diSpWkHb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382571CXZVd9rNqgPAb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382666EuwAd5QVrvHZb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382681Pn8FxS8qyQ09b1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699382734DyGE8MNb6jlIb1493fda534929a5b5d05f80a8cf3d16.jpg


BIN
trading-go/pics/1699449524Qijb0Nylwcjv3fe18ddeee3f922fde4ea74ae229e235.jpg


BIN
trading-go/pics/1699450042EKRxNaHJGEJHdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699450079vDMN0qnbpNyTdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1699451535SuxOmjisW2tkd85dedb14362dc3a251c6c85705ec495.jpg


BIN
trading-go/pics/1702540218QWS0sjmdtMywcb800b0e59cd22f2a10309329be957a9.jpg


BIN
trading-go/pics/1702540821sZwY77rQFtM2dce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/17025409532eMSafToj8gudce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702541132uT2BCMgiZA0v7baafd97122013df4eefc138a9d491e4.png


BIN
trading-go/pics/1702541386VRlRuBCi9b0qdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702542127wVeSqPyrviJUdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702542233WjAPxDBg44wvdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/17025422755pRxydltjb99dce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/17025423420kg8E4hkvczOdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702542562gTfCcjXqQ2Zydce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/170254528518oQnJKgKLqAdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702545454z1REibHMQiA7dce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702545527aav1gLONEjOUdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702545650hhYlNXcydp3vdce75ebb26860c9184474d8244e28d16.png


BIN
trading-go/pics/1702545696WpBAYlipKjAcdce75ebb26860c9184474d8244e28d16.png