diff --git a/api/graphql.go b/api/graphql.go index 7841b1f..dbcb7df 100644 --- a/api/graphql.go +++ b/api/graphql.go @@ -388,8 +388,8 @@ func NewSchema(config Config) (graphql.Schema, error) { "collect_count": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中收藏数等于指定值的"}, "article_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中属于指定文章ID的"}, "user_id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "筛选图像中属于指定用户ID的"}, - "create_time": &graphql.ArgumentConfig{Type: graphql.DateTime, Description: "筛选图像中创建时间等于指定值的"}, - "update_time": &graphql.ArgumentConfig{Type: graphql.DateTime, Description: "筛选图像中更新时间等于指定值的"}, + "create_time": &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选图像中创建时间等于指定值的"}, + "update_time": &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选图像中更新时间等于指定值的"}, "first": &graphql.ArgumentConfig{Type: graphql.Int, Description: "翻页参数(傳回清單中的前n個元素)"}, "last": &graphql.ArgumentConfig{Type: graphql.Int, Description: "翻页参数(傳回清單中的最後n個元素)"}, "after": &graphql.ArgumentConfig{Type: graphql.Int, Description: "翻页参数(傳回清單中指定遊標之後的元素)"}, @@ -409,9 +409,13 @@ func NewSchema(config Config) (graphql.Schema, error) { Orientation string Sort string Order string + CreateTime string `json:"create_time"` + UpdateTime string } mapstructure.Decode(p.Args, &args) + fmt.Println("args.CreateTime:", args.CreateTime) + // 限制长度防止全表扫描 var limit = 10 if args.First != 0 { @@ -425,7 +429,7 @@ func NewSchema(config Config) (graphql.Schema, error) { var query = db.Limit(limit) // 参数映射 - var argFormat = []string{"id", "width", "height", "content", "remark", "description", "tags", "rank", "comment_num", "praise_count", "collect_count", "article_id", "user_id", "create_time", "update_time"} + var argFormat = []string{"id", "width", "height", "content", "remark", "description", "tags", "rank", "comment_num", "praise_count", "collect_count", "article_id", "user_id"} // 筛选条件 for _, format := range argFormat { @@ -519,6 +523,24 @@ func NewSchema(config Config) (graphql.Schema, error) { id_list = append(id_list, ids) } + // 筛选:时间段 + applyTimeCondition := func(name string, str string) { + parts := strings.Split(str, "-") + query = query.Where(fmt.Sprintf("YEAR(%s) = ?", name), parts[0]) + if len(parts) > 1 { + query = query.Where(fmt.Sprintf("MONTH(%s) = ?", name), parts[1]) + } + if len(parts) > 2 { + query = query.Where(fmt.Sprintf("DAY(%s) = ?", name), parts[2]) + } + } + + if createTime, ok := p.Args["create_time"].(string); ok && createTime != "" { + applyTimeCondition("create_time", createTime) + } else if updateTime, ok := p.Args["update_time"].(string); ok && updateTime != "" { + applyTimeCondition("update_time", updateTime) + } + // 数据库中筛选:横屏纵屏 if args.Orientation != "" { query.Where("article_orientation = ?", args.Orientation)