@@ -116,15 +116,25 @@ defmodule NervesHub.Firmwares do
116116 |> group_by ( [ d ] , fragment ( "? ->> 'uuid'" , d . firmware_metadata ) )
117117
118118 Firmware
119- |> join ( :left , [ f ] , d in subquery ( subquery ) , on: d . firmware_uuid == f . uuid )
119+ |> join ( :left , [ f ] , d in subquery ( subquery ) ,
120+ as: :install_count ,
121+ on: d . firmware_uuid == f . uuid
122+ )
120123 |> where ( [ f ] , f . product_id == ^ product . id )
124+ |> filter_selection ( opts [ :filter ] )
121125 |> sort_firmware ( sort_opts )
122- |> select_merge ( [ _f , d ] , % { install_count: d . install_count } )
126+ |> select_merge ( [ _f , install_count: ic ] , % { install_count: ic . install_count } )
123127 |> Flop . run ( flop )
124128 end
125129
130+ defp filter_selection ( query , "active_firmware" ) do
131+ where ( query , [ _f , install_count: ic ] , ic . install_count > 0 )
132+ end
133+
134+ defp filter_selection ( query , _filter ) , do: query
135+
126136 defp sort_firmware ( query , { direction , :install_count } ) do
127- order_by ( query , [ _f , d ] , { ^ direction , d . install_count } )
137+ order_by ( query , [ _f , install_count: ic ] , { ^ direction , ic . install_count } )
128138 end
129139
130140 defp sort_firmware ( query , sort ) , do: order_by ( query , ^ sort )
0 commit comments