From d33e251c7a507d0bb5d9ff144c2535117206d975 Mon Sep 17 00:00:00 2001 From: gogacoder Date: Sat, 15 Mar 2025 16:41:16 +0700 Subject: [PATCH] fix: wrong column name for sorting --- internal/addons/excel/README.md | 0 internal/utils/sorting.go | 34 ++++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 internal/addons/excel/README.md diff --git a/internal/addons/excel/README.md b/internal/addons/excel/README.md new file mode 100644 index 0000000..e69de29 diff --git a/internal/utils/sorting.go b/internal/utils/sorting.go index c8504f0..4a8dd93 100644 --- a/internal/utils/sorting.go +++ b/internal/utils/sorting.go @@ -12,6 +12,30 @@ import ( "strings" ) +import "gorm.io/gorm" + +func GetTableName(model any, db *gorm.DB) (string, error) { + stmt := &gorm.Statement{DB: db} + if err := stmt.Parse(model); err != nil { + return "", err + } + return stmt.Schema.Table, nil +} + +func GetColumnName(model any, fieldName string, db *gorm.DB) (string, error) { + stmt := &gorm.Statement{DB: db} + if err := stmt.Parse(model); err != nil { + return "", err + } + + field := stmt.Schema.LookUpField(fieldName) + if field == nil { + return "", fmt.Errorf("field '%s' not found", fieldName) + } + + return field.DBName, nil +} + var p = message.NewPrinter(language.Russian) func SortByOrder[T any](fieldsSortOrder map[string]string, entity T) ([]*T, error) { @@ -48,7 +72,15 @@ func SortByOrder[T any](fieldsSortOrder map[string]string, entity T) ([]*T, erro fieldPath := tag.GetTag("ui").GetParamOr("field", "") if fieldPath == "" { - orderQuery = append(orderQuery, fmt.Sprintf("%s %s", name, order)) + tableName, err := GetTableName(entity, database.GetInstance()) + if err != nil { + return nil, errors.New(p.Sprintf("Failed to get table name: %s", err)) + } + columnName, err := GetColumnName(entity, field.Name, database.GetInstance()) + if err != nil { + return nil, errors.New(p.Sprintf("Failed to get column name: %s", err)) + } + orderQuery = append(orderQuery, fmt.Sprintf("%s.%s %s", tableName, columnName, order)) } else { fieldsPathParts := strings.Split(fieldPath, ".")