@@ -6,7 +6,10 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
6
6
alias Phoenix.Controller
7
7
alias Plug.Conn
8
8
9
- @ type opts ( ) :: [ order_by: [ atom ( ) ] | Plug . opts ( ) ]
9
+ @ typep opt ( ) ::
10
+ { :order_by , [ atom ( ) ] }
11
+ | { :txi_scope? , boolean ( ) }
12
+ @ type opts ( ) :: [ opt ( ) ]
10
13
11
14
@ scope_types % {
12
15
"gen" => :gen ,
@@ -26,7 +29,9 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
26
29
27
30
@ spec call ( Conn . t ( ) , opts ( ) ) :: Conn . t ( )
28
31
def call ( % Conn { params: params , query_params: query_params } = conn , opts ) do
29
- with { :ok , direction , scope } <- extract_direction_and_scope ( params ) ,
32
+ txi_scope? = Keyword . get ( opts , :txi_scope? , true )
33
+
34
+ with { :ok , direction , scope } <- extract_direction_and_scope ( params , txi_scope? ) ,
30
35
{ :ok , limit } <- extract_limit ( params ) ,
31
36
{ :ok , is_reversed? } <- extract_is_reversed ( params ) ,
32
37
{ :ok , order_by } <- extract_order_by ( params , opts ) ,
@@ -53,20 +58,23 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
53
58
54
59
def call ( conn , _opts ) , do: conn
55
60
56
- defp extract_direction_and_scope ( % { "range_or_dir" => "forward" } ) ,
61
+ defp extract_direction_and_scope ( % { "range_or_dir" => "forward" } , _txi_scope? ) ,
57
62
do: { :ok , :forward , @ default_scope }
58
63
59
- defp extract_direction_and_scope ( % { "range_or_dir" => "backward" } ) ,
64
+ defp extract_direction_and_scope ( % { "range_or_dir" => "backward" } , _txi_scope? ) ,
60
65
do: { :ok , :backward , @ default_scope }
61
66
62
- defp extract_direction_and_scope ( % { "range_or_dir" => range } = params ) do
67
+ defp extract_direction_and_scope ( % { "range_or_dir" => range } = params , txi_scope? ) do
63
68
params
64
69
|> Map . delete ( "range_or_dir" )
65
70
|> Map . put ( "range" , range )
66
- |> extract_direction_and_scope ( )
71
+ |> extract_direction_and_scope ( txi_scope? )
67
72
end
68
73
69
- defp extract_direction_and_scope ( % { "scope_type" => scope_type , "range" => range } = params )
74
+ defp extract_direction_and_scope (
75
+ % { "scope_type" => scope_type , "range" => range } = params ,
76
+ true = _txi_scope?
77
+ )
70
78
when scope_type in @ scope_types_keys do
71
79
scope_type = Map . fetch! ( @ scope_types , scope_type )
72
80
@@ -89,35 +97,38 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
89
97
end
90
98
end
91
99
92
- defp extract_direction_and_scope ( % { "scope_type" => scope_type } ) ,
100
+ defp extract_direction_and_scope ( % { "scope_type" => "gen" } = params , false = _txi_scope? ) ,
101
+ do: extract_direction_and_scope ( params , true )
102
+
103
+ defp extract_direction_and_scope ( % { "scope_type" => scope_type } , _txi_scope? ) ,
93
104
do: { :error , "invalid scope: #{ scope_type } " }
94
105
95
- defp extract_direction_and_scope ( % { "range" => _range } = params ) ,
96
- do: extract_direction_and_scope ( Map . put ( params , "scope_type" , "gen" ) )
106
+ defp extract_direction_and_scope ( % { "range" => _range } = params , txi_scope? ) ,
107
+ do: extract_direction_and_scope ( Map . put ( params , "scope_type" , "gen" ) , txi_scope? )
97
108
98
- defp extract_direction_and_scope ( % { "scope" => scope } = params ) do
109
+ defp extract_direction_and_scope ( % { "scope" => scope } = params , txi_scope? ) do
99
110
case String . split ( scope , ":" ) do
100
111
[ scope_type , range ] ->
101
112
params
102
113
|> Map . delete ( "scope" )
103
114
|> Map . merge ( % { "scope_type" => scope_type , "range" => range } )
104
- |> extract_direction_and_scope ( )
115
+ |> extract_direction_and_scope ( txi_scope? )
105
116
106
117
_invalid_scope ->
107
118
{ :error , "invalid scope: #{ scope } " }
108
119
end
109
120
end
110
121
111
- defp extract_direction_and_scope ( % { "direction" => "forward" } ) ,
122
+ defp extract_direction_and_scope ( % { "direction" => "forward" } , _txi_scope? ) ,
112
123
do: { :ok , :forward , @ default_scope }
113
124
114
- defp extract_direction_and_scope ( % { "direction" => "backward" } ) ,
125
+ defp extract_direction_and_scope ( % { "direction" => "backward" } , _txi_scope? ) ,
115
126
do: { :ok , :backward , @ default_scope }
116
127
117
- defp extract_direction_and_scope ( % { "direction" => direction } ) ,
128
+ defp extract_direction_and_scope ( % { "direction" => direction } , _txi_scope? ) ,
118
129
do: { :error , "invalid direction: #{ direction } " }
119
130
120
- defp extract_direction_and_scope ( _params ) , do: { :ok , :backward , @ default_scope }
131
+ defp extract_direction_and_scope ( _params , _txi_scope? ) , do: { :ok , :backward , @ default_scope }
121
132
122
133
defp extract_range ( range ) when is_binary ( range ) do
123
134
case String . split ( range , "-" ) do
0 commit comments