From 7f91ff9dfa6d6ff8ec35dfea6d5195a20f631127 Mon Sep 17 00:00:00 2001
From: zhangqian <zhangqian@123.com>
Date: 星期一, 13 五月 2024 13:58:16 +0800
Subject: [PATCH] 关注和取消关注接口

---
 constvar/const.go    |    8 +
 request/audio.go     |    4 
 models/audio_text.go |    5 
 service/process.go   |    6 
 service/audio.go     |   24 ++++
 models/audio.go      |    1 
 docs/swagger.yaml    |   47 ++++++++
 controllers/audio.go |   35 ++++++-
 docs/docs.go         |   73 +++++++++++++
 docs/swagger.json    |   73 +++++++++++++
 response/audio.go    |    7 +
 router/router.go     |    1 
 12 files changed, 262 insertions(+), 22 deletions(-)

diff --git a/constvar/const.go b/constvar/const.go
index 8c1287c..5d5daca 100644
--- a/constvar/const.go
+++ b/constvar/const.go
@@ -17,3 +17,11 @@
 	BoolTypeTrue  BoolType = 1 // true
 	BoolTypeFalse BoolType = 2 // false
 )
+
+func (slf BoolType) IsValid() bool {
+	return slf == BoolTypeTrue || slf == BoolTypeFalse
+}
+
+func (slf BoolType) Bool() bool {
+	return slf == BoolTypeTrue
+}
diff --git a/controllers/audio.go b/controllers/audio.go
index 9ea4502..04d3375 100644
--- a/controllers/audio.go
+++ b/controllers/audio.go
@@ -11,6 +11,7 @@
 	"speechAnalysis/models"
 	"speechAnalysis/pkg/logx"
 	"speechAnalysis/request"
+	"speechAnalysis/response"
 	"speechAnalysis/service"
 	"speechAnalysis/utils/upload"
 	"strings"
@@ -97,7 +98,7 @@
 // @Tags      闊抽
 // @Summary   闊抽鍒嗘瀽妫�绱�
 // @Produce   application/json
-// @Param     object  query    request.GetAudioList true  "鏌ヨ鍙傛暟"
+// @Param     object  query    request.GetAudioList true  "鍙傛暟"
 // @Success   200   {object}  util.ResponseList{data=[]models.Audio}  "鎴愬姛"
 // @Router    /api-sa/v1/audio/list [get]
 func (slf AudioCtl) List(c *gin.Context) {
@@ -133,7 +134,7 @@
 // @Tags      闊抽
 // @Summary   澶勭悊闊抽
 // @Produce   application/json
-// @Param     object  body request.ProcessAudio true  "闊抽淇℃伅"
+// @Param     object  body request.ProcessAudio true  "鍙傛暟"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-sa/v1/audio/process [post]
 func (slf AudioCtl) Process(c *gin.Context) {
@@ -156,7 +157,7 @@
 // @Tags      闊抽
 // @Summary   鎵归噺澶勭悊闊抽
 // @Produce   application/json
-// @Param     object  body request.BatchProcessAudio true  "闊抽淇℃伅"
+// @Param     object  body request.BatchProcessAudio true  "鍙傛暟"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-sa/v1/audio/batchProcess [post]
 func (slf AudioCtl) BatchProcess(c *gin.Context) {
@@ -192,7 +193,7 @@
 // @Tags      闊抽
 // @Summary   鍒犻櫎闊抽
 // @Produce   application/json
-// @Param     object  body request.ProcessAudio true  "闊抽淇℃伅"
+// @Param     object  body request.ProcessAudio true  "鍙傛暟"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-sa/v1/audio/delete [post]
 func (slf AudioCtl) Delete(c *gin.Context) {
@@ -215,7 +216,7 @@
 // @Tags      闊抽
 // @Summary   鎵归噺鍒犻櫎闊抽
 // @Produce   application/json
-// @Param     object  body request.BatchProcessAudio true  "闊抽淇℃伅"
+// @Param     object  body request.BatchProcessAudio true  "鍙傛暟"
 // @Success   200 {object} util.Response "鎴愬姛"
 // @Router    /api-sa/v1/audio/batchDelete [post]
 func (slf AudioCtl) BatchDelete(c *gin.Context) {
@@ -233,3 +234,27 @@
 
 	util.ResponseFormat(c, code.DeleteSuccess, "鎴愬姛")
 }
+
+// Follow
+// @Tags      闊抽
+// @Summary   鍏虫敞/鍙栨秷鍏虫敞
+// @Produce   application/json
+// @Param     object  body request.FollowReq true  "鍙傛暟"
+// @Success   200 {object} util.Response{data=response.FollowResp} "鎴愬姛"
+// @Router    /api-sa/v1/audio/follow [post]
+func (slf AudioCtl) Follow(c *gin.Context) {
+	var params request.ProcessAudio
+	if err := c.ShouldBind(&params); err != nil {
+		util.ResponseFormat(c, code.RequestParamError, err.Error())
+		return
+	}
+
+	followStatus, err := service.Follow(params.ID)
+	if err != nil {
+		util.ResponseFormat(c, code.InternalError, err.Error())
+		return
+	}
+	resp := response.FollowResp{FollowStatus: followStatus}
+
+	util.ResponseFormat(c, code.UpdateSuccess, resp)
+}
diff --git a/docs/docs.go b/docs/docs.go
index d16d13e..0decc75 100644
--- a/docs/docs.go
+++ b/docs/docs.go
@@ -27,7 +27,7 @@
                 "summary": "鎵归噺鍒犻櫎闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -57,7 +57,7 @@
                 "summary": "鎵归噺澶勭悊闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -87,7 +87,7 @@
                 "summary": "鍒犻櫎闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -101,6 +101,48 @@
                         "description": "鎴愬姛",
                         "schema": {
                             "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-sa/v1/audio/follow": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "闊抽"
+                ],
+                "summary": "鍏虫敞/鍙栨秷鍏虫敞",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FollowReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/util.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.FollowResp"
+                                        }
+                                    }
+                                }
+                            ]
                         }
                     }
                 }
@@ -195,7 +237,7 @@
                 "summary": "澶勭悊闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -338,6 +380,10 @@
                 "occurrenceTime": {
                     "type": "string"
                 },
+                "score": {
+                    "description": "缃俊搴�",
+                    "type": "number"
+                },
                 "size": {
                     "description": "闊抽澶у皬",
                     "type": "integer"
@@ -369,6 +415,17 @@
                 }
             }
         },
+        "request.FollowReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.ProcessAudio": {
             "type": "object",
             "required": [
@@ -380,6 +437,14 @@
                 }
             }
         },
+        "response.FollowResp": {
+            "type": "object",
+            "properties": {
+                "followStatus": {
+                    "$ref": "#/definitions/constvar.BoolType"
+                }
+            }
+        },
         "util.Response": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.json b/docs/swagger.json
index 42ab712..ba47f87 100644
--- a/docs/swagger.json
+++ b/docs/swagger.json
@@ -15,7 +15,7 @@
                 "summary": "鎵归噺鍒犻櫎闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -45,7 +45,7 @@
                 "summary": "鎵归噺澶勭悊闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -75,7 +75,7 @@
                 "summary": "鍒犻櫎闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -89,6 +89,48 @@
                         "description": "鎴愬姛",
                         "schema": {
                             "$ref": "#/definitions/util.Response"
+                        }
+                    }
+                }
+            }
+        },
+        "/api-sa/v1/audio/follow": {
+            "post": {
+                "produces": [
+                    "application/json"
+                ],
+                "tags": [
+                    "闊抽"
+                ],
+                "summary": "鍏虫敞/鍙栨秷鍏虫敞",
+                "parameters": [
+                    {
+                        "description": "鍙傛暟",
+                        "name": "object",
+                        "in": "body",
+                        "required": true,
+                        "schema": {
+                            "$ref": "#/definitions/request.FollowReq"
+                        }
+                    }
+                ],
+                "responses": {
+                    "200": {
+                        "description": "鎴愬姛",
+                        "schema": {
+                            "allOf": [
+                                {
+                                    "$ref": "#/definitions/util.Response"
+                                },
+                                {
+                                    "type": "object",
+                                    "properties": {
+                                        "data": {
+                                            "$ref": "#/definitions/response.FollowResp"
+                                        }
+                                    }
+                                }
+                            ]
                         }
                     }
                 }
@@ -183,7 +225,7 @@
                 "summary": "澶勭悊闊抽",
                 "parameters": [
                     {
-                        "description": "闊抽淇℃伅",
+                        "description": "鍙傛暟",
                         "name": "object",
                         "in": "body",
                         "required": true,
@@ -326,6 +368,10 @@
                 "occurrenceTime": {
                     "type": "string"
                 },
+                "score": {
+                    "description": "缃俊搴�",
+                    "type": "number"
+                },
                 "size": {
                     "description": "闊抽澶у皬",
                     "type": "integer"
@@ -357,6 +403,17 @@
                 }
             }
         },
+        "request.FollowReq": {
+            "type": "object",
+            "required": [
+                "id"
+            ],
+            "properties": {
+                "id": {
+                    "type": "integer"
+                }
+            }
+        },
         "request.ProcessAudio": {
             "type": "object",
             "required": [
@@ -368,6 +425,14 @@
                 }
             }
         },
+        "response.FollowResp": {
+            "type": "object",
+            "properties": {
+                "followStatus": {
+                    "$ref": "#/definitions/constvar.BoolType"
+                }
+            }
+        },
         "util.Response": {
             "type": "object",
             "properties": {
diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 34715bd..92dd451 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -65,6 +65,9 @@
         type: string
       occurrenceTime:
         type: string
+      score:
+        description: 缃俊搴�
+        type: number
       size:
         description: 闊抽澶у皬
         type: integer
@@ -86,12 +89,24 @@
     required:
     - ids
     type: object
+  request.FollowReq:
+    properties:
+      id:
+        type: integer
+    required:
+    - id
+    type: object
   request.ProcessAudio:
     properties:
       id:
         type: integer
     required:
     - id
+    type: object
+  response.FollowResp:
+    properties:
+      followStatus:
+        $ref: '#/definitions/constvar.BoolType'
     type: object
   util.Response:
     properties:
@@ -121,7 +136,7 @@
   /api-sa/v1/audio/batchDelete:
     post:
       parameters:
-      - description: 闊抽淇℃伅
+      - description: 鍙傛暟
         in: body
         name: object
         required: true
@@ -140,7 +155,7 @@
   /api-sa/v1/audio/batchProcess:
     post:
       parameters:
-      - description: 闊抽淇℃伅
+      - description: 鍙傛暟
         in: body
         name: object
         required: true
@@ -159,7 +174,7 @@
   /api-sa/v1/audio/delete:
     post:
       parameters:
-      - description: 闊抽淇℃伅
+      - description: 鍙傛暟
         in: body
         name: object
         required: true
@@ -173,6 +188,30 @@
           schema:
             $ref: '#/definitions/util.Response'
       summary: 鍒犻櫎闊抽
+      tags:
+      - 闊抽
+  /api-sa/v1/audio/follow:
+    post:
+      parameters:
+      - description: 鍙傛暟
+        in: body
+        name: object
+        required: true
+        schema:
+          $ref: '#/definitions/request.FollowReq'
+      produces:
+      - application/json
+      responses:
+        "200":
+          description: 鎴愬姛
+          schema:
+            allOf:
+            - $ref: '#/definitions/util.Response'
+            - properties:
+                data:
+                  $ref: '#/definitions/response.FollowResp'
+              type: object
+      summary: 鍏虫敞/鍙栨秷鍏虫敞
       tags:
       - 闊抽
   /api-sa/v1/audio/list:
@@ -226,7 +265,7 @@
   /api-sa/v1/audio/process:
     post:
       parameters:
-      - description: 闊抽淇℃伅
+      - description: 鍙傛暟
         in: body
         name: object
         required: true
diff --git a/models/audio.go b/models/audio.go
index 313f379..747d2d9 100644
--- a/models/audio.go
+++ b/models/audio.go
@@ -23,6 +23,7 @@
 		OccurrenceAt     time.Time            `json:"-"`
 		OccurrenceTime   string               `json:"occurrenceTime" gorm:"-"`
 		IsFollowed       constvar.BoolType    `gorm:"type:tinyint;not null;default:2;comment:鏄惁鍏虫敞"` //鏄惁鍏虫敞 1鍏虫敞 2鏈叧娉�
+		Score            float64              `json:"score"`                                        // 缃俊搴�
 	}
 
 	AudioSearch struct {
diff --git a/models/audio_text.go b/models/audio_text.go
index e5e1f36..3e5d4b2 100644
--- a/models/audio_text.go
+++ b/models/audio_text.go
@@ -10,9 +10,8 @@
 	// AudioText 闊抽鏂囨湰
 	AudioText struct {
 		gorm.Model
-		AudioID   uint    `gorm:"unique;type:int;not null;default:0;comment:闊抽id" json:"audioID"` // 闊抽id
-		AudioText string  `json:"audioText"`                                                      // 闊抽鏂囨湰
-		Score     float64 `json:"score"`                                                          // 缃俊搴�
+		AudioID   uint   `gorm:"unique;type:int;not null;default:0;comment:闊抽id" json:"audioID"` // 闊抽id
+		AudioText string `json:"audioText"`                                                      // 闊抽鏂囨湰
 	}
 
 	AudioTextSearch struct {
diff --git a/request/audio.go b/request/audio.go
index 41cc415..1e5512a 100644
--- a/request/audio.go
+++ b/request/audio.go
@@ -16,3 +16,7 @@
 type BatchProcessAudio struct {
 	IDs []uint `json:"ids" binding:"required"`
 }
+
+type FollowReq struct {
+	ID uint `json:"id" binding:"required"`
+}
diff --git a/response/audio.go b/response/audio.go
new file mode 100644
index 0000000..dc61f7a
--- /dev/null
+++ b/response/audio.go
@@ -0,0 +1,7 @@
+package response
+
+import "speechAnalysis/constvar"
+
+type FollowResp struct {
+	FollowStatus constvar.BoolType `json:"followStatus"`
+}
diff --git a/router/router.go b/router/router.go
index 6ab95fb..aba2789 100644
--- a/router/router.go
+++ b/router/router.go
@@ -31,6 +31,7 @@
 		organizeAPI.POST("batchProcess", AudioCtl.BatchProcess) // 闊抽鎵归噺澶勭悊
 		organizeAPI.POST("delete", AudioCtl.Delete)             // 闊抽鍒犻櫎
 		organizeAPI.POST("batchDelete", AudioCtl.BatchDelete)   // 闊抽鎵归噺鍒犻櫎
+		organizeAPI.POST("follow", AudioCtl.Follow)             // 鍏虫敞/鍙栨秷鍏虫敞
 	}
 
 	return r
diff --git a/service/audio.go b/service/audio.go
index fa30810..677b695 100644
--- a/service/audio.go
+++ b/service/audio.go
@@ -3,6 +3,7 @@
 import (
 	"errors"
 	"gorm.io/gorm"
+	"speechAnalysis/constvar"
 	"speechAnalysis/models"
 	"speechAnalysis/pkg/logx"
 )
@@ -37,3 +38,26 @@
 	}
 	return nil
 }
+
+func Follow(audioId uint) (followStatus constvar.BoolType, err error) {
+	if audioId == 0 {
+		return
+	}
+	audio, err := models.NewAudioSearch().SetID(audioId).First()
+	if err != nil {
+		return followStatus, errors.New("DB閿欒")
+	}
+	if audio.IsFollowed.Bool() {
+		followStatus = constvar.BoolTypeFalse
+	} else {
+		followStatus = constvar.BoolTypeTrue
+	}
+	err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{
+		"is_followed": followStatus,
+	})
+	if err != nil {
+		logx.Errorf("follow audio err: %v", err)
+		return followStatus, errors.New("DB閿欒")
+	}
+	return followStatus, nil
+}
diff --git a/service/process.go b/service/process.go
index 50bf7eb..1d1595a 100644
--- a/service/process.go
+++ b/service/process.go
@@ -111,14 +111,16 @@
 		}
 		logx.Infof("AnalysisAudio result: %v", resp)
 		err = models.WithTransaction(func(db *gorm.DB) error {
-			err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{"audio_status": constvar.AudioStatusFinish})
+			err = models.NewAudioSearch().SetID(audioId).UpdateByMap(map[string]interface{}{
+				"audio_status": constvar.AudioStatusFinish,
+				"score":        resp.Score,
+			})
 			if err != nil {
 				return err
 			}
 			err = models.NewAudioTextSearch().Save(&models.AudioText{
 				AudioID:   audio.ID,
 				AudioText: resp.Result,
-				Score:     resp.Score,
 			})
 			return err
 		})

--
Gitblit v1.8.0