diff --git a/api/article.go b/api/article.go index d2f211f..03140cb 100644 --- a/api/article.go +++ b/api/article.go @@ -28,7 +28,7 @@ type Article struct { Collect bool `json:"collect" gorm:"column:is_collect"` Praise bool `json:"praise" gorm:"column:is_praise"` CollectCount int `json:"collect_count" gorm:"column:collect_num"` - PraiseCount int `json:"praise_count" gorm:"column:praise_num"` + PraiseCount int `json:"praise_count" gorm:"column:praise"` CreateTime time.Time `json:"create_time" db:"create_time"` UpdateTime time.Time `json:"update_time" db:"update_time"` Emoji1 int `json:"emoji1"` @@ -153,7 +153,7 @@ var ArticleItems = &graphql.Field{ } } - // 如果没有外部排序则使用指定排序(正则sort只能是字母数字下划下) + // 如果没有外部排序则使用指定排序(正则sort只能是字母数字下划线) if p.Args["text"] == nil && p.Args["similar"] == nil && p.Args["interest"] == nil { sort := regexp.MustCompile(`[^a-zA-Z0-9_]`).ReplaceAllString(p.Args["sort"].(string), "") query = query.Select("web_article.id", goqu.L( @@ -202,7 +202,6 @@ var ArticleItems = &graphql.Field{ if funk.Contains(fields, "text_count") { text_count = ",(SELECT COUNT(*) FROM web_images wi WHERE wi.article_id = web_article.id AND wi.text != '') AS text_count" } - sql = fmt.Sprintf(` WITH RankedArticles AS (%s) SELECT * %s %s %s FROM web_article INNER JOIN( @@ -210,7 +209,6 @@ var ArticleItems = &graphql.Field{ ) AS LimitedRanked ON LimitedRanked.id = web_article.id %s %s ORDER BY LimitedRanked.row_num ASC LIMIT %d `, sql, praise, collect, text_count, cursor, praise_join, collect_join, limit) - fmt.Println(sql) if err := db.Raw(sql).Scan(&articles).Error; err != nil { @@ -218,6 +216,40 @@ var ArticleItems = &graphql.Field{ return nil, err } + //// 试图使用GORM语法整理 + //subQuery := db.Table("web_article").Select([]string{ + // "web_article.*", + // fmt.Sprintf("ROW_NUMBER() OVER(ORDER BY web_article.%s %s) AS row_num", p.Args["sort"], p.Args["order"]), + //}).Where("category_id = 10").Limit(limit) + //// 筛选条件 + //for _, format := range []string{"id", "style", "device", "orientation", "era", "category_id", "tags"} { + // if p.Args[format] != nil { + // subQuery = subQuery.Where(fmt.Sprintf("%s = ?", format), p.Args[format]) + // } + //} + //// 按指定用户点赞筛选 + //if p.Args["praise"] != nil { + // subQuery = subQuery.Joins("JOIN web_praise AS wp ON wp.praise_id = web_article.id AND wp.user_id = ? AND wp.type = 0", p.Args["praise"]) + //} + //// 按指定用户收藏筛选 + //if p.Args["collect"] != nil { + // subQuery = subQuery.Joins("JOIN web_collect AS wc ON wc.collect_id = web_article.id AND wc.user_id = ? AND wc.type = 0", p.Args["collect"]) + //} + //var _select []string = []string{"*"} + //if funk.Contains(fields, "text_count") { + // _select = append(_select, "(SELECT COUNT(*) FROM web_images wi WHERE wi.article_id = web_article.id AND wi.text != '') AS text_count") + //} + //if funk.Contains(fields, "collect") { + // _select = append(_select, fmt.Sprintf("(SELECT COUNT(*) FROM web_collect wc WHERE wc.collect_id = web_article.id AND wc.user_id = %d AND wc.type = 0) AS is_collect", user_id)) + //} + //if funk.Contains(fields, "praise") { + // _select = append(_select, fmt.Sprintf("(SELECT COUNT(*) FROM web_praise wp WHERE wp.praise_id = web_article.id AND wp.user_id = %d AND wp.type = 0) AS is_praise", user_id)) + //} + //if err := db.Table("(?) AS limited_imgs", subQuery).Select(_select).Scan(&articles).Error; err != nil { + // fmt.Println("获取文章列表失败", err) + // return nil, err + //} + var items = ListItem(p.Info.FieldASTs[0].SelectionSet.Selections) if funk.Contains(items, "views") { type ApiResponse struct { diff --git a/api/work.go b/api/work.go index 72f9de4..10a2f29 100644 --- a/api/work.go +++ b/api/work.go @@ -29,7 +29,7 @@ type Work struct { Collect bool `json:"collect" gorm:"column:is_collect"` Praise bool `json:"praise" gorm:"column:is_praise"` CollectCount int `json:"collect_count" gorm:"column:collect_num"` - PraiseCount int `json:"praise_count" gorm:"column:praise_num"` + PraiseCount int `json:"praise_count" gorm:"column:praise"` CreateTime time.Time `json:"create_time"` UpdateTime time.Time `json:"update_time"` Emoji1 int `json:"emoji1"`