Skip to content

Commit

Permalink
feat: orderBy uses tables value
Browse files Browse the repository at this point in the history
  • Loading branch information
juunini committed Aug 8, 2023
1 parent f022ca1 commit 0459ab9
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 11 deletions.
9 changes: 2 additions & 7 deletions order/order.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,11 @@ package order

import "github.com/cloudmatelabs/gorm-gqlgen-relay/utils"

func By(table string, input any, reverse bool) ([]string, error) {
func By(table string, tables *map[string]string, input any, reverse bool) ([]string, error) {
filter, err := utils.ConvertToMap(input)
if err != nil {
return nil, err
}

prefix := ""
if table != "" {
prefix = table + "."
}

return traverse(prefix, filter, reverse), nil
return traverse(table, tables, filter, reverse), nil
}
26 changes: 24 additions & 2 deletions order/order_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,12 @@ var input = map[string]any{
"field1": "ASC",
"field2": "DESC",
}
var tables = &map[string]string{
"field1": "sample",
}

func TestOrder(t *testing.T) {
query, err := order.By("sample", input, false)
query, err := order.By("sample", nil, input, false)
if err != nil {
t.Fatal(err)
}
Expand All @@ -32,7 +35,7 @@ func TestOrder(t *testing.T) {
}

func TestReverseOrder(t *testing.T) {
query, err := order.By("", input, true)
query, err := order.By("", nil, input, true)
if err != nil {
t.Fatal(err)
}
Expand All @@ -49,3 +52,22 @@ func TestReverseOrder(t *testing.T) {
t.Fatal("query should contain field2 ASC")
}
}

func TestOrder_With_Tables(t *testing.T) {
query, err := order.By("", tables, input, false)
if err != nil {
t.Fatal(err)
}

if len(query) != 2 {
t.Fatal("query length should be 2")
}

if !slices.Contains(query, "sample.field1 ASC") {
t.Fatal("query should contain sample.field1 ASC")
}

if !slices.Contains(query, "field2 DESC") {
t.Fatal("query should contain field2 DESC")
}
}
18 changes: 17 additions & 1 deletion order/traverse.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,27 @@ package order

import "github.com/cloudmatelabs/gorm-gqlgen-relay/utils"

func traverse(prefix string, filter map[string]any, reverse bool) (orders []string) {
func traverse(table string, tables *map[string]string, filter map[string]any, reverse bool) (orders []string) {
for field, direction := range filter {
if reverse {
direction = utils.ReverseDirection(direction.(string))
}

prefix := ""

if tables != nil {
for k, v := range *tables {
if k == field {
prefix = v + "."
break
}
}
} else {
if table != "" {
prefix = table + "."
}
}

orders = append(orders, prefix+field+" "+direction.(string))
}
return
Expand Down
2 changes: 1 addition & 1 deletion relay/paginate.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ func Paginate[Model any](db *gorm.DB, _where any, _orderBy any, option PaginateO
return nil, err
}

orders, err := order.By(option.Table, _orderBy, option.Last != nil)
orders, err := order.By(option.Table, option.Tables, _orderBy, option.Last != nil)
if err != nil {
return nil, err
}
Expand Down

0 comments on commit 0459ab9

Please sign in to comment.