@@ -3,6 +3,7 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
3
3
4
4
import Plug.Conn
5
5
6
+ alias AeMdw.Db.State
6
7
alias AeMdw.Db.Util , as: DbUtil
7
8
alias Phoenix.Controller
8
9
alias Plug.Conn
@@ -86,22 +87,28 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
86
87
when scope_type in @ scope_types_keys do
87
88
scope_type = Map . fetch! ( @ scope_types , scope_type )
88
89
89
- case extract_range ( range ) do
90
+ range
91
+ |> extract_range ( )
92
+ |> case do
90
93
{ :ok , first , last } when first < last ->
91
- { :ok , : forward, generate_range ( state , scope_type , first , last ) }
94
+ { :forward , generate_range ( state , scope_type , first , last ) }
92
95
93
96
{ :ok , first , last } when first > last ->
94
- { :ok , : backward, generate_range ( state , scope_type , last , first ) }
97
+ { :backward , generate_range ( state , scope_type , last , first ) }
95
98
96
99
{ :ok , first , last } ->
97
100
if Map . get ( params , "direction" , "backward" ) == "forward" do
98
- { :ok , : forward, generate_range ( state , scope_type , last , first ) }
101
+ { :forward , generate_range ( state , scope_type , last , first ) }
99
102
else
100
- { :ok , : backward, generate_range ( state , scope_type , last , first ) }
103
+ { :backward , generate_range ( state , scope_type , last , first ) }
101
104
end
102
105
103
106
{ :error , reason } ->
104
- { :error , reason }
107
+ { nil , { :error , reason } }
108
+ end
109
+ |> case do
110
+ { _direction , { :error , reason } } -> { :error , reason }
111
+ { direction , range } -> { :ok , direction , range }
105
112
end
106
113
end
107
114
@@ -222,15 +229,23 @@ defmodule AeMdwWeb.Plugs.PaginatedPlug do
222
229
end
223
230
end
224
231
232
+ @ spec generate_range ( State . t ( ) , atom ( ) , pos_integer ( ) , pos_integer ( ) ) ::
233
+ { atom ( ) , Range . t ( ) } | { :error , atom ( ) }
225
234
defp generate_range ( state , :time , first , last ) do
226
- { first_txi , last_txi } =
227
- DbUtil . time_to_txi (
228
- state ,
229
- first |> DateTime . from_unix! ( ) |> DateTime . to_unix ( :millisecond ) ,
230
- last |> DateTime . from_unix! ( ) |> DateTime . to_unix ( :millisecond )
231
- )
232
-
233
- generate_range ( state , :txi , first_txi , last_txi )
235
+ with { _first , { :ok , first_parsed } } <- { first , DateTime . from_unix ( first ) } ,
236
+ { _last , { :ok , last_parsed } } <- { last , DateTime . from_unix ( last ) } do
237
+ { first_txi , last_txi } =
238
+ DbUtil . time_to_txi (
239
+ state ,
240
+ DateTime . to_unix ( first_parsed , :millisecond ) ,
241
+ DateTime . to_unix ( last_parsed , :millisecond )
242
+ )
243
+
244
+ generate_range ( state , :txi , first_txi , last_txi )
245
+ else
246
+ { invalid_unix_time , { :error , _reason } } ->
247
+ { :error , "invalid unix time: #{ invalid_unix_time } " }
248
+ end
234
249
end
235
250
236
251
defp generate_range ( _state , scope_type , first , last ) do
0 commit comments