GetQuestionPage query questions page
(ctx context.Context, req *schema.QuestionPageReq)
| 1468 | |
| 1469 | // GetQuestionPage query questions page |
| 1470 | func (qs *QuestionService) GetQuestionPage(ctx context.Context, req *schema.QuestionPageReq) ( |
| 1471 | questions []*schema.QuestionPageResp, total int64, err error) { |
| 1472 | questions = make([]*schema.QuestionPageResp, 0) |
| 1473 | // query by user role |
| 1474 | showHidden := false |
| 1475 | if req.LoginUserID != "" && req.UserIDBeSearched != "" { |
| 1476 | showHidden = req.LoginUserID == req.UserIDBeSearched |
| 1477 | if !showHidden { |
| 1478 | userRole, err := qs.userRoleRelService.GetUserRole(ctx, req.LoginUserID) |
| 1479 | if err != nil { |
| 1480 | return nil, 0, err |
| 1481 | } |
| 1482 | showHidden = userRole == role.RoleAdminID || userRole == role.RoleModeratorID |
| 1483 | } |
| 1484 | } |
| 1485 | // query by tag condition |
| 1486 | var tagIDs = make([]string, 0) |
| 1487 | if len(req.Tag) > 0 { |
| 1488 | tagInfo, exist, err := qs.tagCommon.GetTagBySlugName(ctx, strings.ToLower(req.Tag)) |
| 1489 | if err != nil { |
| 1490 | return nil, 0, err |
| 1491 | } |
| 1492 | if exist { |
| 1493 | synTagIds, err := qs.tagCommon.GetTagIDsByMainTagID(ctx, tagInfo.ID) |
| 1494 | if err != nil { |
| 1495 | return nil, 0, err |
| 1496 | } |
| 1497 | tagIDs = append(tagIDs, synTagIds...) |
| 1498 | tagIDs = append(tagIDs, tagInfo.ID) |
| 1499 | } else { |
| 1500 | return questions, 0, nil |
| 1501 | } |
| 1502 | } |
| 1503 | |
| 1504 | // query by user condition |
| 1505 | if req.Username != "" { |
| 1506 | userinfo, exist, err := qs.userCommon.GetUserBasicInfoByUserName(ctx, req.Username) |
| 1507 | if err != nil { |
| 1508 | return nil, 0, err |
| 1509 | } |
| 1510 | if !exist { |
| 1511 | return questions, 0, nil |
| 1512 | } |
| 1513 | req.UserIDBeSearched = userinfo.ID |
| 1514 | } |
| 1515 | |
| 1516 | if req.OrderCond == schema.QuestionOrderCondHot { |
| 1517 | req.InDays = schema.HotInDays |
| 1518 | } |
| 1519 | |
| 1520 | questionList, total, err := qs.questionRepo.GetQuestionPage(ctx, req.Page, req.PageSize, |
| 1521 | tagIDs, req.UserIDBeSearched, req.OrderCond, req.InDays, showHidden, req.ShowPending) |
| 1522 | if err != nil { |
| 1523 | return nil, 0, err |
| 1524 | } |
| 1525 | questions, err = qs.questioncommon.FormatQuestionsPage(ctx, questionList, req.LoginUserID, req.OrderCond) |
| 1526 | if err != nil { |
| 1527 | return nil, 0, err |
no test coverage detected