go-zero 单体应用实践(三)

列表数据分页

1、api 定义 Pager api 可以单独一个文件;此时 userlogin.api 需要 import “api/pager.api”

Pager {
    Page int `form:"page,default=1"`
    PageSize int `form:"page_size,default=10"`
    TotalSize int `form:"total_size,default=0"`
}

TagListRequest {
		Name string `form:"name,optional"`
		Pager
}
TagListResponse {
    List     []TagResponse `json:"list"`
    Matedata Pager         `json:"matedata"`
}


service userlogin-api {
	@handler Tags
	get /api/tag/list(TagListRequest) returns (TagListResponse)
}

2、model 文件:BlogTagModel增加TageList方法;同时 customBlogTagModel.TagList 实现具体逻辑

BlogTagModel interface {
		blogTagModel
		TagList(context.Context, *types.TagListRequest) (*types.TagListResponse, error)
}


func (c *customBlogTagModel) TagList(ctx context.Context, request *types.TagListRequest) (*types.TagListResponse, error) {
	result := &types.TagListResponse{}
	pager := request.Pager
	countSql := fmt.Sprintf("select %s from %s where 1 ", "count(id) as total_size", c.table)
	_ = c.QueryRowNoCacheCtx(ctx, &pager.TotalSize, countSql)
	result.Matedata = pager
	where := "1 "
	var err error
	if len(request.Name) > 0 {
		where += "AND name=? "
		sql := fmt.Sprintf("select %s from %s where %s  limit %d,%d",
			blogTagRows, c.table, where, (pager.Page-1)*pager.PageSize, request.PageSize)

		err = c.QueryRowsNoCacheCtx(ctx, &result.List, sql, request.Name)
	} else {
		sql := fmt.Sprintf("select %s from %s where %s  limit %d,%d",
			blogTagRows, c.table, where, (pager.Page-1)*pager.PageSize, request.PageSize)

		err = c.QueryRowsNoCacheCtx(ctx, &result.List, sql)
	}
	switch err {
	case nil:
		return result, nil
	case sqlc.ErrNotFound:
		return nil, ErrNotFound
	default:
		return nil, err
	}
}

3、logic 文件编辑

func (l *TagsLogic) Tags(req *types.TagListRequest) (resp *types.TagListResponse, err error) {
	return l.svcCtx.TagsModel.TagList(l.ctx, req)
}

4、测试 http://127.0.0.1:8000/api/tag/list?page=2&page_size=5

{
    "list": [
        {
            "id": 6,
            "name": "python",
            "state": 1
        },
        {
            "id": 7,
            "name": "rust",
            "state": 1
        },
        {
            "id": 8,
            "name": "typescript",
            "state": 1
        }
    ],
    "matedata": {
        "Page": 2,
        "PageSize": 5,
        "TotalSize": 8
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Devin_S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值