fix: sorting

This commit is contained in:
2025-03-15 18:16:00 +07:00
parent d33e251c7a
commit 8924c68005
15 changed files with 129 additions and 29 deletions

41
internal/utils/search.go Normal file
View File

@@ -0,0 +1,41 @@
package utils
import (
"app/internal/database"
"fmt"
"github.com/kuzgoga/fogg"
"gorm.io/gorm/clause"
"reflect"
)
func FindPhraseByAllFields[T any](phrase string, entity T) ([]*T, error) {
db := database.GetInstance().Preload(clause.Associations)
structType := reflect.TypeOf(entity)
for i := 0; i < structType.NumField(); i++ {
field := structType.Field(i)
tag, err := fogg.Parse(string(field.Tag))
if err != nil {
return nil, fmt.Errorf("ошибка при разборе тэга '%s': %w", field.Name, err)
}
if field.Type.Kind() == reflect.Pointer {
field.Type = field.Type.Elem()
}
if field.Type.Kind() == reflect.String {
db.Where(fmt.Sprintf("`%s` like ?", field.Name), "%"+phrase+"%")
} else {
if tag.HasTag("ui") {
uiTag := tag.GetTag("ui")
nestedFieldPath := uiTag.GetParamOr("field", "")
if nestedFieldPath != "" {
db.Preload(fmt.Sprintf("%s.%s", field.Name, nestedFieldPath))
}
}
}
}
return nil, nil
}