数据
type ObtainClassificationRes struct {Id int `json:"id" dc:"用户名"`Name string `json:"name" dc:"标题"`Introduce string `json:"introduce" dc:"介绍"`Picture string `json:"picture" dc:"图片"`Vip int `json:"vip" dc:"vip:0普通1vip"`LabelData []*LabelItem `json:"label_data" dc:"标签结构体"`// Add more fields if necessary
}type LabelItem struct {Id int `json:"id" dc:"用户名"`SortId int `json:"sort_id" dc:"分类id"`Vip int `json:"vip" dc:"vip:0普通1vip"`Name string `json:"name" dc:"标题"`Introduce string `json:"introduce" dc:"介绍"`Picture string `json:"picture" dc:"图片"`// Add more fields if necessary
}
方法
func (s *sAppuserContent) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {err = g.Try(ctx, func(ctx context.Context) {appAiSortList, err := systemdao.AppAiSort.Ctx(ctx).WithAll().All()if err != nil {// 错误处理err = fmt.Errorf("获取分类数据失败: %v", err)return}// 定义结果列表resultList := make([]*model.ObtainClassificationRes, len(appAiSortList))for i, appAiSort := range appAiSortList {fmt.Printf("appAiSort", appAiSort)fmt.Printf("ortID", appAiSort["id"].Int())// 查询每个分类下的标签数据appAiLabelList, err := systemdao.AppAiLabel.Ctx(ctx).WithAll().Where(systemdao.AppAiLabel.Columns().SortId, appAiSort["id"].Int()).All()if err != nil {// 错误处理err = fmt.Errorf("获取分类下的标签数据失败: %v", err)return}// 构建 LabelData 数组labelData := make([]*model.LabelItem, len(appAiLabelList))for j, appAiLabel := range appAiLabelList {// 将查询到的标签数据转换为 LabelItem 结构体labelData[j] = &model.LabelItem{Id: appAiLabel["id"].Int(),SortId: appAiLabel["sort_id"].Int(),Vip: appAiLabel["vip"].Int(),Name: appAiLabel["name"].String(),Introduce: appAiLabel["introduce"].String(),Picture: appAiLabel["picture"].String(),}}// 构建 ObtainClassificationRes 结构体obtainClassificationRes := &model.ObtainClassificationRes{Id: appAiSort["id"].Int(),Name: appAiSort["name"].String(),Introduce: appAiSort["introduce"].String(),Picture: appAiSort["picture"].String(),Vip: appAiSort["vip"].Int(),LabelData: labelData,// Add more fields if necessary}// 将 obtainClassificationRes 添加到结果列表中resultList[i] = obtainClassificationRes}res = &appuser.ObtainClassificationRes{List: resultList,// Add more fields if necessary}})return
}
api
// ObtainClassificationReq 获取首页分类标签信息请求参数
type ObtainClassificationReq struct {g.Meta `path:"/ObtainClassification" tags:"客户端ai分类模块" method:"post" summary:" 获取首页分类标签信息"`commonApi.Author
}// ObtainClassificationRes 获取首页分类标签信息返回结果
type ObtainClassificationRes struct {g.Meta `mime:"application/json"`commonApi.ListResList []*model.ObtainClassificationRes `json:"list"`
}
controller
// 获取首页分类标签信息
func (c *appuserGenController) ObtainClassification(ctx context.Context, req *appuser.ObtainClassificationReq) (res *appuser.ObtainClassificationRes, err error) {res, err = service.AppuserContent().ObtainClassification(ctx, req)return}
解释
-
获取分类数据:
- 通过执行 SQL 查询语句
SELECT * FROM app_ai_sort ORDER BY priority DESC
从数据库中获取分类数据。 - 使用
g.DB().Query(ctx, sql)
函数执行查询,并将结果保存在appAiSortList
变量中。 - 如果查询过程中出现错误,将错误信息保存在
err
变量中,并提前返回。
- 通过执行 SQL 查询语句
-
构建结果列表:
- 使用
make([]*model.ObtainClassificationRes, len(appAiSortList))
创建一个长度为appAiSortList
的切片,用于存储结果列表。 - 结果列表中的每个元素都是类型为
model.ObtainClassificationRes
的指针。
- 使用
-
遍历分类数据并获取每个分类下的标签数据:
- 使用
for i, appAiSort := range appAiSortList
循环遍历分类数据列表。 - 在每次循环中,通过执行 SQL 查询语句
SELECT * FROM app_ai_label WHERE sort_id = %d ORDER BY priority DESC
获取与当前分类关联的标签数据,其中%d
会被当前分类的 ID 替代。 - 使用
g.DB().Query(ctx, sql)
函数执行查询,并将结果保存在appAiLabelList
变量中。 - 如果查询过程中出现错误,将错误信息保存在
err
变量中,并提前返回。
- 使用
-
构建标签数据数组:
- 使用
make([]*model.LabelItem, len(appAiLabelList))
创建一个长度为appAiLabelList
的切片,用于存储标签数据数组。 - 标签数据数组中的每个元素都是类型为
model.LabelItem
的指针。
- 使用
-
转换标签数据为结构体:
- 使用
for j, appAiLabel := range appAiLabelList
循环遍历标签数据列表。 - 在每次循环中,将查询到的标签数据转换为
model.LabelItem
结构体的实例,并将其赋值给标签数据数组的对应元素。 - 转换过程中,将数据库查询结果中的字段值赋值给
model.LabelItem
结构体中相应的字段。
- 使用
-
构建
ObtainClassificationRes
结构体:- 使用查询到的分类数据和标签数据构建
ObtainClassificationRes
结构体的实例。 - 在构建过程中,将分类数据中的字段值赋值给
ObtainClassificationRes
结构体中相应的字段,同时将标签数据数组赋值给LabelData
字段。
- 使用查询到的分类数据和标签数据构建
-
将
ObtainClassificationRes
添加到结果列表中:- 将构建好的
ObtainClassificationRes
实例添加到结果列表的对应位置。
- 将构建好的
-
构建响应对象:
- 使用
&appuser.ObtainClassificationRes{List: resultList}
创建一个appuser.ObtainClassificationRes
的实例,并将结果列表赋值给List
字段。
- 使用
-
返回结果:
- 将构建好的响应对象
res
和可能发生的错误err
返回给调用方。
- 将构建好的响应对象
整个代码的目的是获取分类数据和对应的标签数据,并将它们组装成一个结构化的响应对象,以便返回给调用方。具体步骤包括查询分类数据和标签数据,将它们转换为相应的结构体,并将它们组合成一个包含结果列表的响应对象。这样做可以提供给调用方一个完整的分类数据和标签数据的信息,以便进一步处理和使用。