go_gf框架方式分页查询列表示例

API(ExampleCheckReq):

ExampleCheckReq 结构体定义了 ExampleCheck API 的请求参数。它包括了 LabelId(标签的ID)、Page(页码)和 PageSize(每页数据条数)等字段。

// ExampleCheckReq 获取示例请求参数
type ExampleCheckReq struct {
	g.Meta   `path:"/ExampleCheck" tags:"客户端ai分类模块" method:"post" summary:" 获取标签下示例信息"`
	LabelId  int `p:"labelId" v:"required#标签ID不能为空" dc:"标签ID"`
	Page     int `p:"Page" v:"required#页码不能为空" dc:"第几页"`
	PageSize int `p:"PageSize" v:"required#页数不能为空" dc:"一页多少条数据"`
	commonApi.Author
}

// ExampleCheckRes 获取示例返回结果
type ExampleCheckRes struct {
	g.Meta `mime:"application/json"`
	commonApi.ListRes
	List        []*model.ExampleCheckRes `json:"list"`
	CurrentPage int                      `json:"currentPage"`
	TotalCount  int                      `json:"totalCount"`
}

appuser:

在 appuser 包中,有一个名为 ExampleCheck 的方法,用于处理示例检查的逻辑。它调用了 service.AppuserContent().ExampleCheck 方法,并将请求参数传递给该方法。


// 获取示例
func (c *appuserGenController) ExampleCheck(ctx context.Context, req *appuser.ExampleCheckReq) (res *appuser.ExampleCheckRes, err error) {
	res, err = service.AppuserContent().ExampleCheck(ctx, req)
	return

}

logic:

在 sAppuserContent 结构体中,有一个名为 ExampleCheck 的方法,用于处理示例检查的逻辑。它首先根据请求参数计算出偏移量(offset)并构建查询总数的SQL语句。然后执行该查询获取总数据量。接下来,根据标签ID、页码和每页数据条数构建查询示例数据的SQL语句,并执行该查询获取分页数据。最后,根据查询结果构建 ExampleCheckRes 结构体,并将分页数据、当前页码和总数据量填充到结构体中。

func (s *sAppuserContent) ExampleCheck(ctx context.Context, req *appuser.ExampleCheckReq) (res *appuser.ExampleCheckRes, err error) {
	err = g.Try(ctx, func(ctx context.Context) {
		page := req.Page
		pageSize := req.PageSize
		offset := (page - 1) * pageSize
		countSql := fmt.Sprintf("SELECT COUNT(*) FROM app_ai_example WHERE label_id = %d", gconv.Int(req.LabelId))
		totalCount, err := g.DB().GetCount(ctx, countSql)
		if err != nil {
			err = fmt.Errorf("获取数据总量失败: %v", err)
			return
		}
		sql := fmt.Sprintf("SELECT * FROM app_ai_example WHERE label_id = %d ORDER BY priority DESC LIMIT %d OFFSET %d", gconv.Int(req.LabelId), pageSize, offset)
		appAiExample, err := g.DB().Query(ctx, sql)
		if err != nil {
			err = fmt.Errorf("获取分类数据失败: %v", err)
			return
		}
		// 定义结果列表
		resultList := make([]*model.ExampleCheckRes, len(appAiExample))

		for i, appAiSort := range appAiExample {

			// 构建 ObtainClassificationRes 结构体
			ExampleCheckListData := &model.ExampleCheckRes{
				Id:      appAiSort["id"].Int(),
				Problem: appAiSort["problem"].String(),
				// Add more fields if necessary
			}

			// 将 obtainClassificationRes 添加到结果列表中
			resultList[i] = ExampleCheckListData
		}

		res = &appuser.ExampleCheckRes{
			List:        resultList,
			CurrentPage: page,
			TotalCount:  totalCount,
		}
	})
	return
}

func (s *sAppuserContent) ExampleCheck(ctx context.Context, req *appuser.ExampleCheckReq) (res *appuser.ExampleCheckRes, err error) {
	err = g.Try(ctx, func(ctx context.Context) {
		page := req.Page
		pageSize := req.PageSize
		offset := (page - 1) * pageSize
		totalCount, err := systemDao.AppAiExample.Ctx(ctx).Count()
		if err != nil {
			err = fmt.Errorf("获取分类数据总量失败: %v", err)
			return
		}
		appAiExample, err := systemDao.AppAiExample.Ctx(ctx).WithAll().Order("priority DESC").Offset(offset).Limit(pageSize).All()
		if err != nil {
			err = fmt.Errorf("获取分类数据失败: %v", err)
			return
		}
		// 定义结果列表
		resultList := make([]*model.ExampleCheckRes, len(appAiExample))

		for i, appAiSort := range appAiExample {

			// 构建 ObtainClassificationRes 结构体
			ExampleCheckListData := &model.ExampleCheckRes{
				Id:      appAiSort["id"].Int(),
				Problem: appAiSort["problem"].String(),
				// Add more fields if necessary
			}

			// 将 obtainClassificationRes 添加到结果列表中
			resultList[i] = ExampleCheckListData
		}

		res = &appuser.ExampleCheckRes{
			List:        resultList,
			CurrentPage: page,
			TotalCount:  totalCount,
		}
	})
	return
}

model:

ExampleCheckRes 结构体定义了示例检查的返回结果。它包括了示例的ID(Id)和问题(Problem)等字段。

这段代码实现了根据标签ID分页获取示例的功能。它通过API接收请求参数,然后在logic中进行数据查询和分页处理,并最终将结果封装到返回结构体中。

type ExampleCheckRes struct {
	Id      int    `json:"id" dc:"示例ID"`
	Problem string `json:"problem" dc:"问题"`
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

淡忘_cx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值