Skip to content

Commit 04c64a9

Browse files
committed
feat:support cursor of index articles
1 parent 961a562 commit 04c64a9

File tree

6 files changed

+22
-20
lines changed

6 files changed

+22
-20
lines changed

api/guest/articles.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -38,22 +38,24 @@ func PostArticle(c *gin.Context) {
3838
// GetArticleList is the api that returns a list of articles
3939
// if you want to add parameter like limit, please use url like /article?limit=10
4040
func GetArticleList(c *gin.Context) {
41-
limit := c.DefaultQuery("limit", "50")
42-
sortby := c.DefaultQuery("sortby", "id")
41+
limit := c.DefaultQuery("limit", "10")
42+
sortby := c.DefaultQuery("sortby", "create_time")
4343
order := c.DefaultQuery("order", "desc")
44+
cursor := c.DefaultQuery("cursor", "2559090472000")
4445
// userID
4546

4647
var err error
4748

48-
limitNum, err := strconv.Atoi(limit)
49-
if err != nil || limitNum <= 0 || order != "desc" && order != "asc" {
49+
limitNum, err1 := strconv.Atoi(limit)
50+
cursorTime, err2 := strconv.ParseInt(cursor, 10, 64)
51+
if err1 != nil || err2 != nil || limitNum <= 0 || order != "desc" && order != "asc" {
5052
err = errors.New("参数有误")
5153
}
5254
if err != nil {
5355
setAPIResponse(c, nil, err.Error(), false)
5456
}
5557

56-
resp, err := service.ArticleService.GetArticleList(limitNum, sortby, order)
58+
resp, err := service.ArticleService.GetArticleList(limitNum, cursorTime, sortby, order)
5759
if err != nil {
5860
setAPIResponse(c, nil, err.Error(), false)
5961
} else {

model/response.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ type ActionLink struct {
2828
// ArticleListResponse ...
2929
type ArticleListResponse struct {
3030
TotalNum int `json:"total_num"`
31+
Cursor int64 `json:"cursor"`
3132
ArticleList []*ArticleBriefInfo `json:"article_list"`
3233
}
3334

repository/article_repo.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ func (r *articleRepository) Create(db *gorm.DB, article *model.Article) error {
2222
return db.Create(article).Error
2323
}
2424

25-
func (r *articleRepository) GetArticleFields(db *gorm.DB, fields []string, limit int, sortby string, order string) []model.Article {
25+
func (r *articleRepository) GetArticleFields(db *gorm.DB, fields []string, cursorTime int64, limit int, sortby string, order string) []model.Article {
2626
var articles []model.Article
27-
db.Select(fields).Order(fmt.Sprintf("%s %s", sortby, order)).Limit(limit).Find(&articles)
27+
db.Where("create_time < ?", cursorTime).Select(fields).Order(fmt.Sprintf("%s %s", sortby, order)).Limit(limit).Find(&articles)
2828
return articles
2929
}
3030

service/articles.go

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,12 +34,19 @@ func (s *articleService) BuildArticle(userID int64, title string, content string
3434
return article, nil
3535
}
3636

37-
func (s *articleService) GetArticleList(limit int, sortby string, order string) (*model.ArticleListResponse, error) {
37+
func (s *articleService) GetArticleList(limit int, cursorTime int64, sortby string, order string) (*model.ArticleListResponse, error) {
3838
resp := &model.ArticleListResponse{}
3939
fields := []string{"id", "title", "create_time", "user_id", "view_count", "comment_count", "like_count"}
40-
articles := repository.ArticleRepository.GetArticleFields(util.DB(), fields, limit, sortby, order)
40+
articles := repository.ArticleRepository.GetArticleFields(util.DB(), fields, cursorTime, limit, sortby, order)
4141

4242
briefList := BuildArticleList(articles)
43+
44+
resp.Cursor = cursorTime
45+
for i := range briefList {
46+
if briefList[i].CreateTime < resp.Cursor {
47+
resp.Cursor = briefList[i].CreateTime
48+
}
49+
}
4350
resp.ArticleList = briefList
4451
resp.TotalNum = len(briefList)
4552
return resp, nil

site/components/LoadMore.vue

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export default {
4242
},
4343
data() {
4444
return {
45-
cursor: 0, // 分页标识
45+
cursor: 2559090472000, // 分页标识
4646
results: this.initData.article_list || [], // 列表数据
4747
hasMore: true, // 是否有更多数据
4848
loading: false, // 是否正在加载中
@@ -62,9 +62,9 @@ export default {
6262
cursor: this.cursor,
6363
})
6464
const ret = await this.$axios.get(this.url, {
65-
// params: _params,
65+
params: _params,
6666
})
67-
// this.cursor = ret.cursor
67+
this.cursor = ret.cursor
6868
if (ret.article_list && ret.total_num) {
6969
ret.article_list.forEach((item) => {
7070
this.results.push(item)

site/middleware/README.md

Lines changed: 0 additions & 8 deletions
This file was deleted.

0 commit comments

Comments
 (0)