feat(search): Optimized search result filtering and paging logic

- Introduced the `filteredNodes` list to optimize the node filtering process
- Filtered results based on the page limit during paging
- Modified search logic to ensure nodes are within the user's base path
- Added access permission checks for node metadata
- Adjusted paging logic to avoid redundant node retrieval
pull/9287/head
okatu-loli 2025-08-24 21:56:18 +08:00
parent a9fcd51bc4
commit 69fbdbdc97
1 changed files with 27 additions and 16 deletions

View File

@ -43,12 +43,18 @@ func Search(c *gin.Context) {
common.ErrorResp(c, err, 400)
return
}
nodes, total, err := search.Search(c, req.SearchReq)
var (
filteredNodes []model.SearchNode
)
for len(filteredNodes) < req.PerPage {
nodes, _, err := search.Search(c, req.SearchReq)
if err != nil {
common.ErrorResp(c, err, 500)
return
}
var filteredNodes []model.SearchNode
if len(nodes) == 0 {
break
}
for _, node := range nodes {
if !strings.HasPrefix(node.Parent, user.BasePath) {
continue
@ -61,10 +67,15 @@ func Search(c *gin.Context) {
continue
}
filteredNodes = append(filteredNodes, node)
if len(filteredNodes) >= req.PerPage {
break
}
}
req.Page++
}
common.SuccessResp(c, common.PageResp{
Content: utils.MustSliceConvert(filteredNodes, nodeToSearchResp),
Total: total,
Total: int64(len(filteredNodes)),
})
}