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:"问题"`
}