in internal/service/content/question_service.go [1402:1461]
func (qs *QuestionService) GetQuestionPage(ctx context.Context, req *schema.QuestionPageReq) (
questions []*schema.QuestionPageResp, total int64, err error) {
questions = make([]*schema.QuestionPageResp, 0)
// query by user role
showHidden := false
if req.LoginUserID != "" && req.UserIDBeSearched != "" {
showHidden = req.LoginUserID == req.UserIDBeSearched
if !showHidden {
userRole, err := qs.userRoleRelService.GetUserRole(ctx, req.LoginUserID)
if err != nil {
return nil, 0, err
}
showHidden = userRole == role.RoleAdminID || userRole == role.RoleModeratorID
}
}
// query by tag condition
var tagIDs = make([]string, 0)
if len(req.Tag) > 0 {
tagInfo, exist, err := qs.tagCommon.GetTagBySlugName(ctx, strings.ToLower(req.Tag))
if err != nil {
return nil, 0, err
}
if exist {
synTagIds, err := qs.tagCommon.GetTagIDsByMainTagID(ctx, tagInfo.ID)
if err != nil {
return nil, 0, err
}
tagIDs = append(synTagIds, tagInfo.ID)
} else {
return questions, 0, nil
}
}
// query by user condition
if req.Username != "" {
userinfo, exist, err := qs.userCommon.GetUserBasicInfoByUserName(ctx, req.Username)
if err != nil {
return nil, 0, err
}
if !exist {
return questions, 0, nil
}
req.UserIDBeSearched = userinfo.ID
}
if req.OrderCond == schema.QuestionOrderCondHot {
req.InDays = schema.HotInDays
}
questionList, total, err := qs.questionRepo.GetQuestionPage(ctx, req.Page, req.PageSize,
tagIDs, req.UserIDBeSearched, req.OrderCond, req.InDays, showHidden, req.ShowPending)
if err != nil {
return nil, 0, err
}
questions, err = qs.questioncommon.FormatQuestionsPage(ctx, questionList, req.LoginUserID, req.OrderCond)
if err != nil {
return nil, 0, err
}
return questions, total, nil
}