支持分类查询 category
This commit is contained in:
		@@ -81,7 +81,7 @@ func NewSchema(config Config) (graphql.Schema, error) {
 | 
				
			|||||||
	// 文章的可选字段
 | 
						// 文章的可选字段
 | 
				
			||||||
	article = graphql.NewObject(graphql.ObjectConfig{
 | 
						article = graphql.NewObject(graphql.ObjectConfig{
 | 
				
			||||||
		Name:        "Article",
 | 
							Name:        "Article",
 | 
				
			||||||
		Description: "文章信息",
 | 
							Description: "文章",
 | 
				
			||||||
		Fields: graphql.Fields{
 | 
							Fields: graphql.Fields{
 | 
				
			||||||
			"id":          &graphql.Field{Type: graphql.Int, Description: "文章ID"},
 | 
								"id":          &graphql.Field{Type: graphql.Int, Description: "文章ID"},
 | 
				
			||||||
			"title":       &graphql.Field{Type: graphql.String, Description: "文章标题"},
 | 
								"title":       &graphql.Field{Type: graphql.String, Description: "文章标题"},
 | 
				
			||||||
@@ -92,6 +92,26 @@ func NewSchema(config Config) (graphql.Schema, error) {
 | 
				
			|||||||
		},
 | 
							},
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						category := graphql.NewObject(graphql.ObjectConfig{
 | 
				
			||||||
 | 
							Name:        "Category",
 | 
				
			||||||
 | 
							Description: "分类",
 | 
				
			||||||
 | 
							Fields: graphql.Fields{
 | 
				
			||||||
 | 
								"id":          &graphql.Field{Type: graphql.Int, Description: "分类ID"},
 | 
				
			||||||
 | 
								"title":       &graphql.Field{Type: graphql.String, Description: "分类标题"},
 | 
				
			||||||
 | 
								"keyword":     &graphql.Field{Type: graphql.String, Description: "分类关键词"},
 | 
				
			||||||
 | 
								"parent_id":   &graphql.Field{Type: graphql.Int, Description: "分类父级ID"},
 | 
				
			||||||
 | 
								"create_time": &graphql.Field{Type: graphql.DateTime, Description: "分类创建时间"},
 | 
				
			||||||
 | 
								"update_time": &graphql.Field{Type: graphql.DateTime, Description: "分类更新时间"},
 | 
				
			||||||
 | 
								"status":      &graphql.Field{Type: graphql.Int, Description: "分类状态"},
 | 
				
			||||||
 | 
								"content":     &graphql.Field{Type: graphql.String, Description: "分类内容"},
 | 
				
			||||||
 | 
								"sort":        &graphql.Field{Type: graphql.Int, Description: "分类排序"},
 | 
				
			||||||
 | 
								"image":       &graphql.Field{Type: graphql.String, Description: "分类图片"},
 | 
				
			||||||
 | 
								"image_num":   &graphql.Field{Type: graphql.Int, Description: "分类图片数量"},
 | 
				
			||||||
 | 
								"article_num": &graphql.Field{Type: graphql.Int, Description: "分类文章数量"},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
						fmt.Println(category)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	// 图像中的文字提取
 | 
						// 图像中的文字提取
 | 
				
			||||||
	text = graphql.NewObject(graphql.ObjectConfig{
 | 
						text = graphql.NewObject(graphql.ObjectConfig{
 | 
				
			||||||
		Name:        "Text",
 | 
							Name:        "Text",
 | 
				
			||||||
@@ -106,7 +126,7 @@ func NewSchema(config Config) (graphql.Schema, error) {
 | 
				
			|||||||
	// 图像的可选字段
 | 
						// 图像的可选字段
 | 
				
			||||||
	image := graphql.NewObject(graphql.ObjectConfig{
 | 
						image := graphql.NewObject(graphql.ObjectConfig{
 | 
				
			||||||
		Name:        "Image",
 | 
							Name:        "Image",
 | 
				
			||||||
		Description: "图像信息",
 | 
							Description: "图像",
 | 
				
			||||||
		Fields: graphql.Fields{
 | 
							Fields: graphql.Fields{
 | 
				
			||||||
			"id":                      &graphql.Field{Type: graphql.Int, Description: "图像ID"},
 | 
								"id":                      &graphql.Field{Type: graphql.Int, Description: "图像ID"},
 | 
				
			||||||
			"width":                   &graphql.Field{Type: graphql.Int, Description: "图像宽度"},
 | 
								"width":                   &graphql.Field{Type: graphql.Int, Description: "图像宽度"},
 | 
				
			||||||
@@ -180,6 +200,76 @@ func NewSchema(config Config) (graphql.Schema, error) {
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	schema, err := graphql.NewSchema(graphql.SchemaConfig{Query: graphql.NewObject(graphql.ObjectConfig{Name: "RootQuery", Fields: graphql.Fields{
 | 
						schema, err := graphql.NewSchema(graphql.SchemaConfig{Query: graphql.NewObject(graphql.ObjectConfig{Name: "RootQuery", Fields: graphql.Fields{
 | 
				
			||||||
 | 
							"categorys": &graphql.Field{
 | 
				
			||||||
 | 
								Name:        "categorys",
 | 
				
			||||||
 | 
								Description: "分类列表",
 | 
				
			||||||
 | 
								Type: graphql.NewObject(graphql.ObjectConfig{
 | 
				
			||||||
 | 
									Name:        "CategoryConnection",
 | 
				
			||||||
 | 
									Description: "条件筛选分类列表",
 | 
				
			||||||
 | 
									Fields: graphql.Fields{
 | 
				
			||||||
 | 
										"list":  &graphql.Field{Type: graphql.NewList(category), Description: "分类列表"},
 | 
				
			||||||
 | 
										"total": &graphql.Field{Type: graphql.Int, Description: "分类总数"},
 | 
				
			||||||
 | 
									},
 | 
				
			||||||
 | 
								}),
 | 
				
			||||||
 | 
								Args: graphql.FieldConfigArgument{
 | 
				
			||||||
 | 
									"id":          &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选分类中指定ID的"},
 | 
				
			||||||
 | 
									"title":       &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选分类中含有指定标题的"},
 | 
				
			||||||
 | 
									"keyword":     &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选分类中含有指定关键词的"},
 | 
				
			||||||
 | 
									"parent_id":   &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选分类中含有指定父级ID的"},
 | 
				
			||||||
 | 
									"create_time": &graphql.ArgumentConfig{Type: graphql.DateTime, Description: "筛选分类中创建时间等于指定值的"},
 | 
				
			||||||
 | 
									"update_time": &graphql.ArgumentConfig{Type: graphql.DateTime, Description: "筛选分类中更新时间等于指定值的"},
 | 
				
			||||||
 | 
									"first":       &graphql.ArgumentConfig{Type: graphql.Int, Description: "翻页参数(傳回清單中的前n個元素)"},
 | 
				
			||||||
 | 
									"last":        &graphql.ArgumentConfig{Type: graphql.Int, Description: "翻页参数(傳回清單中的最後n個元素)"},
 | 
				
			||||||
 | 
									"after":       &graphql.ArgumentConfig{Type: graphql.String, Description: "翻页参数(傳回清單中指定遊標之後的元素)"},
 | 
				
			||||||
 | 
									"before":      &graphql.ArgumentConfig{Type: graphql.String, Description: "翻页参数(傳回清單中指定遊標之前的元素)"},
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
								Resolve: func(p graphql.ResolveParams) (interface{}, error) {
 | 
				
			||||||
 | 
									var categorys []Category
 | 
				
			||||||
 | 
									var total int
 | 
				
			||||||
 | 
									var err error
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 获取筛选条件
 | 
				
			||||||
 | 
									var category Category
 | 
				
			||||||
 | 
									mapstructure.Decode(p.Args, &category)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 获取翻页参数
 | 
				
			||||||
 | 
									var first, last int
 | 
				
			||||||
 | 
									var after, before string
 | 
				
			||||||
 | 
									if p.Args["first"] != nil {
 | 
				
			||||||
 | 
										first = p.Args["first"].(int)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if p.Args["last"] != nil {
 | 
				
			||||||
 | 
										last = p.Args["last"].(int)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if p.Args["after"] != nil {
 | 
				
			||||||
 | 
										after = p.Args["after"].(string)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if p.Args["before"] != nil {
 | 
				
			||||||
 | 
										before = p.Args["before"].(string)
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									fmt.Println(first, last, after, before)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 获取请求的字段
 | 
				
			||||||
 | 
									fields := strings.Join(get_fields(p.Info.FieldASTs[0].SelectionSet.Selections), ",")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 筛选条件
 | 
				
			||||||
 | 
									where_str := ""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									// 查询分类列表
 | 
				
			||||||
 | 
									var query strings.Builder
 | 
				
			||||||
 | 
									query.WriteString(fmt.Sprintf("SELECT %s FROM web_article %s LIMIT %d OFFSET %d", fields, where_str, 10, 0))
 | 
				
			||||||
 | 
									if err := connection.Select(&categorys, query.String()); err != nil {
 | 
				
			||||||
 | 
										fmt.Println("查询分类列表失败", err)
 | 
				
			||||||
 | 
										return nil, err
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									return map[string]interface{}{
 | 
				
			||||||
 | 
										"list":  categorys,
 | 
				
			||||||
 | 
										"total": total,
 | 
				
			||||||
 | 
									}, err
 | 
				
			||||||
 | 
								},
 | 
				
			||||||
 | 
							},
 | 
				
			||||||
		"users": &graphql.Field{
 | 
							"users": &graphql.Field{
 | 
				
			||||||
			Name:        "users",
 | 
								Name:        "users",
 | 
				
			||||||
			Description: "用户列表",
 | 
								Description: "用户列表",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -125,6 +125,21 @@ type Article struct {
 | 
				
			|||||||
	UpdateTime time.Time `json:"update_time" db:"update_time"`
 | 
						UpdateTime time.Time `json:"update_time" db:"update_time"`
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type Category struct {
 | 
				
			||||||
 | 
						ID         int
 | 
				
			||||||
 | 
						Title      string
 | 
				
			||||||
 | 
						Keyword    string
 | 
				
			||||||
 | 
						ParentID   int
 | 
				
			||||||
 | 
						CreateTime time.Time
 | 
				
			||||||
 | 
						UpdateTime time.Time
 | 
				
			||||||
 | 
						Status     int
 | 
				
			||||||
 | 
						Content    string
 | 
				
			||||||
 | 
						Sort       int
 | 
				
			||||||
 | 
						Image      string
 | 
				
			||||||
 | 
						ImageNum   int
 | 
				
			||||||
 | 
						ArticleNum int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// 输入配置
 | 
					// 输入配置
 | 
				
			||||||
type ConfigMysql struct {
 | 
					type ConfigMysql struct {
 | 
				
			||||||
	Host     string
 | 
						Host     string
 | 
				
			||||||
@@ -133,6 +148,7 @@ type ConfigMysql struct {
 | 
				
			|||||||
	UserName string
 | 
						UserName string
 | 
				
			||||||
	Password string
 | 
						Password string
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Config struct {
 | 
					type Config struct {
 | 
				
			||||||
	Mysql ConfigMysql
 | 
						Mysql ConfigMysql
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user