Files
phylum/server/internal/core/fs/search.go
2025-05-14 11:04:36 +05:30

32 lines
759 B
Go

package fs
import (
"strings"
"github.com/jackc/pgx/v5"
)
func (f filesystem) Search(query string, includeDeleted bool) ([]Resource, error) {
qb := strings.Builder{}
qb.WriteString(fullResourceQuery)
qb.WriteString("WHERE f_prepare_search(r.name) %> @query::TEXT")
if !includeDeleted {
qb.WriteString("\nAND r.deleted IS NULL")
}
if !f.fullAccess {
qb.WriteString("\nAND r.permissions[@user_id::INT]::INTEGER <> 0")
}
qb.WriteString("\nORDER BY word_similarity(f_prepare_search(r.name), @query::TEXT) DESC")
args := pgx.NamedArgs{
"query": strings.ToLower(query),
"user_id": f.userID,
}
if rows, err := f.db.Query(qb.String(), args); err != nil {
return nil, err
} else {
return pgx.CollectRows(rows, f.scanFullResource)
}
}