数据
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.ListRes
List []*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
返回给调用方。
- 将构建好的响应对象
整个代码的目的是获取分类数据和对应的标签数据,并将它们组装成一个结构化的响应对象,以便返回给调用方。具体步骤包括查询分类数据和标签数据,将它们转换为相应的结构体,并将它们组合成一个包含结果列表的响应对象。这样做可以提供给调用方一个完整的分类数据和标签数据的信息,以便进一步处理和使用。