收集阅读行为
This commit is contained in:
@@ -1,6 +1,7 @@
|
|||||||
package api
|
package api
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
"image"
|
"image"
|
||||||
"log"
|
"log"
|
||||||
@@ -20,6 +21,7 @@ import (
|
|||||||
"github.com/jmoiron/sqlx"
|
"github.com/jmoiron/sqlx"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
"github.com/thoas/go-funk"
|
"github.com/thoas/go-funk"
|
||||||
|
"github.com/zhenghaoz/gorse/client"
|
||||||
"gorm.io/driver/mysql"
|
"gorm.io/driver/mysql"
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
@@ -232,6 +234,11 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
|||||||
"user": &graphql.Field{Type: user, Description: "所属用户"},
|
"user": &graphql.Field{Type: user, Description: "所属用户"},
|
||||||
"create_time": &graphql.Field{Type: graphql.DateTime, Description: "创建时间"},
|
"create_time": &graphql.Field{Type: graphql.DateTime, Description: "创建时间"},
|
||||||
"update_time": &graphql.Field{Type: graphql.DateTime, Description: "更新时间"},
|
"update_time": &graphql.Field{Type: graphql.DateTime, Description: "更新时间"},
|
||||||
|
"text_count": &graphql.Field{Type: graphql.Int, Description: "文字数量", Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
||||||
|
var count int64
|
||||||
|
err := db.Table("web_images").Where("article_id = ?", p.Source.(Article).ID).Where("text != ''").Count(&count).Error
|
||||||
|
return int(count), err
|
||||||
|
}},
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -355,6 +362,9 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
|||||||
if fieldAST.Name.Value == "list" {
|
if fieldAST.Name.Value == "list" {
|
||||||
for _, field := range fieldAST.SelectionSet.Selections {
|
for _, field := range fieldAST.SelectionSet.Selections {
|
||||||
fieldAST, _ := field.(*ast.Field)
|
fieldAST, _ := field.(*ast.Field)
|
||||||
|
if fieldAST.Name.Value == "text_count" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
fields = append(fields, fieldAST.Name.Value)
|
fields = append(fields, fieldAST.Name.Value)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -630,6 +640,23 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
|||||||
query = query.Where(goqu.Ex{"web_images.id": goqu.Op{"in": item}}).Select("web_images.id", goqu.L(
|
query = query.Where(goqu.Ex{"web_images.id": goqu.Op{"in": item}}).Select("web_images.id", goqu.L(
|
||||||
fmt.Sprintf("ROW_NUMBER() OVER(ORDER BY FIELD(%s, %s))", "web_images.id", regexp.MustCompile(`[\[\]]`).ReplaceAllString(strings.Join(strings.Fields(fmt.Sprint(item)), ", "), "")),
|
fmt.Sprintf("ROW_NUMBER() OVER(ORDER BY FIELD(%s, %s))", "web_images.id", regexp.MustCompile(`[\[\]]`).ReplaceAllString(strings.Join(strings.Fields(fmt.Sprint(item)), ", "), "")),
|
||||||
).As("row_num"))
|
).As("row_num"))
|
||||||
|
|
||||||
|
// 收集阅读行为
|
||||||
|
if p.Context.Value("user_id") != nil && p.Args["after"] == nil {
|
||||||
|
ctx := context.Background()
|
||||||
|
user_id := p.Context.Value("user_id").(int)
|
||||||
|
|
||||||
|
feedbacks := []client.Feedback{{
|
||||||
|
FeedbackType: "read",
|
||||||
|
UserId: fmt.Sprintf("%s", user_id),
|
||||||
|
ItemId: fmt.Sprintf("%s", p.Args["Similar"]),
|
||||||
|
Timestamp: time.Now().Format("2006-01-02 15:04:05"),
|
||||||
|
}}
|
||||||
|
|
||||||
|
if _, err := gorse.InsertFeedback(ctx, feedbacks); err != nil {
|
||||||
|
fmt.Println("写入阅读记录失败", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 筛选:兴趣推荐
|
// 筛选:兴趣推荐
|
||||||
@@ -1002,6 +1029,22 @@ func NewSchema(config Config) (graphql.Schema, error) {
|
|||||||
return img, nil
|
return img, nil
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
"article": &graphql.Field{
|
||||||
|
Name: "article",
|
||||||
|
Description: "单篇文章",
|
||||||
|
Type: article,
|
||||||
|
Args: graphql.FieldConfigArgument{
|
||||||
|
"id": &graphql.ArgumentConfig{Type: graphql.Int, Description: "根据ID获取文章"},
|
||||||
|
},
|
||||||
|
Resolve: func(p graphql.ResolveParams) (interface{}, error) {
|
||||||
|
article := Article{ID: p.Args["id"].(int)}
|
||||||
|
if err := db.First(&article).Error; err != nil {
|
||||||
|
log.Println("获取文章失败", err)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return article, nil
|
||||||
|
},
|
||||||
|
},
|
||||||
}})})
|
}})})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return schema, err
|
return schema, err
|
||||||
|
Reference in New Issue
Block a user