From fa2af13e96e22ee9cd82f8067210aff122725977 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A7=89?= Date: Thu, 30 Nov 2023 05:23:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/graphql.go | 28 ++++++++++++++++----------- api/struct.go | 42 +++++++++++++++++++++++++++++++++++++++-- bin/main.go | 1 - models/elasticsearch.go | 2 ++ 4 files changed, 59 insertions(+), 14 deletions(-) diff --git a/api/graphql.go b/api/graphql.go index 7e65f0b..b6ce8b2 100644 --- a/api/graphql.go +++ b/api/graphql.go @@ -93,6 +93,7 @@ func NewSchema() (graphql.Schema, error) { "rank": &graphql.ArgumentConfig{Type: graphql.String}, "create_time": &graphql.ArgumentConfig{Type: graphql.DateTime}, "update_time": &graphql.ArgumentConfig{Type: graphql.DateTime}, + "text": &graphql.ArgumentConfig{Type: graphql.String}, // 查找图像中的文字 "first": &graphql.ArgumentConfig{Type: graphql.Int, DefaultValue: 10}, // 翻页参数 "after": &graphql.ArgumentConfig{Type: graphql.String, DefaultValue: "0"}, // 翻页参数 }, @@ -102,17 +103,20 @@ func NewSchema() (graphql.Schema, error) { for _, field := range requestedFields { fieldAST, ok := field.(*ast.Field) if ok { - if fieldAST.Name.Value == "list" { + switch fieldAST.Name.Value { + case "list": for _, field := range fieldAST.SelectionSet.Selections { fieldAST, ok := field.(*ast.Field) if ok { fields = append(fields, fieldAST.Name.Value) } } - } else if fieldAST.Name.Value == "next" { + case "next": fmt.Println("next") - } else { - fields = append(fields, fieldAST.Name.Value) + case "text": + fmt.Println("text") + default: + fmt.Println(fieldAST.Name.Value) } } } @@ -194,23 +198,25 @@ func NewSchema() (graphql.Schema, error) { for _, field := range requestedFields { fieldAST, ok := field.(*ast.Field) if ok { - if fieldAST.Name.Value == "list" { + switch fieldAST.Name.Value { + case "list": for _, field := range fieldAST.SelectionSet.Selections { fieldAST, ok := field.(*ast.Field) if ok { - if fieldAST.Name.Value == "user" { + switch fieldAST.Name.Value { + case "user": fields = append(fields, "user_id") - } else if fieldAST.Name.Value == "article" { + case "article": fields = append(fields, "article_id") - } else { + default: fields = append(fields, fieldAST.Name.Value) } } } - } else if fieldAST.Name.Value == "next" { + case "next": fmt.Println("next") - } else { - fields = append(fields, fieldAST.Name.Value) + default: + fmt.Println(fieldAST.Name.Value) } } } diff --git a/api/struct.go b/api/struct.go index 6aa3384..2581d0b 100644 --- a/api/struct.go +++ b/api/struct.go @@ -1,6 +1,7 @@ package api import ( + "reflect" "time" ) @@ -19,8 +20,8 @@ type Image struct { CollectCount int `json:"collect_count" db:"collect_count"` ArticleID int `json:"article_id" db:"article_id"` UserID int `json:"user_id" db:"user_id"` - User User `json:"user" db:"user"` - Article Article `json:"article" db:"article"` + User User `json:"user" db:"-"` + Article Article `json:"article" db:"-"` CreateTime time.Time `json:"create_time" db:"create_time"` UpdateTime time.Time `json:"update_time" db:"update_time"` } @@ -41,3 +42,40 @@ type Article struct { CreateTime time.Time `json:"create_time" db:"create_time"` UpdateTime time.Time `json:"update_time" db:"update_time"` } + +// 利用反射获取每个结构体所有字段 +func getFields(s interface{}) (fields []string) { + t := reflect.TypeOf(s) + for i := 0; i < t.NumField(); i++ { + fields = append(fields, t.Field(i).Name) + } + return fields +} + +// 检查字段是否存在 +func checkFields(fields []string, fields_list []string) bool { + for _, field := range fields { + if !contains(fields_list, field) { + return false + } + } + return true +} + +// 判断字符串是否存在于字符串数组中 +func contains(s []string, e string) bool { + for _, v := range s { + if v == e { + return true + } + } + return false +} + +func QueryUserList(fields []string) (user_list []User) { + if !checkFields(fields, getFields(User{})) { + return + } + + return +} diff --git a/bin/main.go b/bin/main.go index 621e6c3..128e64f 100644 --- a/bin/main.go +++ b/bin/main.go @@ -368,7 +368,6 @@ func main() { conditions.WriteString(fmt.Sprintf(" id IN (%s)", strings.Join(idsStr, ","))) // 拼接查询条件 } } - //conditions.WriteString(fmt.Sprintf(" LIMIT %d, %d", (images.Page-1)*images.PageSize, images.PageSize)) // 拼接分页条件(已经从ids分页) sql := fmt.Sprintf("SELECT id, width, height, content, update_time, create_time, user_id, article_id, article_category_top_id, praise_count, collect_count FROM web_images %s", conditions.String()) rows, err := mysqlConnection.Database.Query(sql) if err != nil { diff --git a/models/elasticsearch.go b/models/elasticsearch.go index a2f1c24..5d7ff77 100644 --- a/models/elasticsearch.go +++ b/models/elasticsearch.go @@ -56,6 +56,7 @@ type SearchData struct { took int } +// 获取搜索结果的 ID 列表 func (sd *SearchData) GetIDList() (id_list []string) { for _, hit := range sd.Hits.Hits { id_list = append(id_list, hit.ID) @@ -63,6 +64,7 @@ func (sd *SearchData) GetIDList() (id_list []string) { return id_list } +// 获取搜索结果的内容列表 func ElasticsearchSearch(text string) (r *SearchData) { // 通过字符串构建查询 var buf bytes.Buffer