diff --git a/api/graphql.go b/api/graphql.go index 3989ae0..6f59036 100644 --- a/api/graphql.go +++ b/api/graphql.go @@ -349,6 +349,18 @@ func NewSchema(config Config) (graphql.Schema, error) { }, }) + game := graphql.NewObject(graphql.ObjectConfig{ + Name: "Game", + Description: "游戏", + Fields: graphql.Fields{ + "id": &graphql.Field{Type: graphql.Int, Description: "游戏ID"}, + "title": &graphql.Field{Type: graphql.String, Description: "游戏标题"}, + "era": &graphql.Field{Type: graphql.String, Description: "游戏上线年份"}, + "create_time": &graphql.Field{Type: graphql.DateTime, Description: "游戏创建时间"}, + "update_time": &graphql.Field{Type: graphql.DateTime, Description: "游戏更新时间"}, + }, + }) + image.AddFieldConfig("user", &graphql.Field{Type: user, Description: "图像所属用户"}) image.AddFieldConfig("similars", &graphql.Field{Type: graphql.NewList(image), Description: "相似的图像", Resolve: func(p graphql.ResolveParams) (interface{}, error) { return []Image{}, nil @@ -502,6 +514,62 @@ func NewSchema(config Config) (graphql.Schema, error) { }, nil }, }, + "games": &graphql.Field{ + Name: "games", + Description: "游戏列表", + Type: graphql.NewObject(graphql.ObjectConfig{ + Name: "GameConnection", + Description: "条件筛选游戏列表", + Fields: graphql.Fields{ + "list": &graphql.Field{Type: graphql.NewList(game), 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: "筛选游戏中含有指定标题的"}, + "era": &graphql.ArgumentConfig{Type: graphql.String, Description: "筛选游戏中含有指定年份的"}, + "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 games []Game + var total int + var err error + + // 获取筛选条件 + var arg struct { + ID int + Title string + Era string + First int + Last int + After string + Before string + } + mapstructure.Decode(p.Args, &arg) + + var limit int = 10 + if arg.First != 0 { + limit = arg.First + } else if arg.Last != 0 { + limit = arg.Last + } + + if err := db.Limit(limit).Where("category_top_id = 22").Find(&games).Error; err != nil { + return nil, err + } + + return map[string]interface{}{ + "list": games, + "total": total, + }, err + }, + }, "images": &graphql.Field{ Name: "images", Description: "图像列表", @@ -792,11 +860,6 @@ func NewSchema(config Config) (graphql.Schema, error) { goqu.I("web_images.user_id").Eq(goqu.I("web_fans.blogger_id")), goqu.I("web_fans.follower_id").Eq(p.Args["follower"]), )) - //query = query.Join( - // goqu.Dialect("mysql").From("web_fans").Select("web_fans.blogger_id").Where(goqu.Ex{"web_fans.follower_id": p.Args["follower"]}), - // goqu.On(goqu.I("web_images.user_id").Eq(goqu.I("web_fans.blogger_id"))), - //) - //query = query.Where(goqu.L("EXISTS (SELECT 1 FROM web_fans WHERE web_fans.blogger_id = web_images.user_id AND web_fans.follower_id = ?)", p.Args["follower"])) } // 数据库中筛选: 按图像主色调颜色筛选 @@ -919,7 +982,6 @@ func NewSchema(config Config) (graphql.Schema, error) { var find = db.Where("web_images.id IN ?", ids) for _, item := range LoadItem(p.Info.FieldASTs[0].SelectionSet.Selections) { - //fmt.Println(index, item) find = find.Preload(item) } diff --git a/api/struct.go b/api/struct.go index a70905c..426f029 100644 --- a/api/struct.go +++ b/api/struct.go @@ -109,6 +109,26 @@ func (User) TableName() string { return "web_member" } +type Game struct { + ID int `json:"id" gorm:"primaryKey"` + Title string `json:"title"` + Orientation string `json:"orientation"` + Device string `json:"device"` + Era string `json:"era"` + Tags string `json:"tags"` + UserId int `json:"user_id"` + Content string `json:"content"` + Image string `json:"image"` + Images string `json:"images"` + User User `json:"user" gorm:"foreignKey:UserId"` + CreateTime time.Time `json:"create_time"` + UpdateTime time.Time `json:"update_time"` +} + +func (Game) TableName() string { + return "web_article" +} + type Article struct { ID int `json:"id" db:"id" gorm:"primaryKey"` Title string `json:"title" db:"title"`