Pārlūkot izejas kodu

refactor(paginate): use exported fun call `{M,F}`

JimMoen 4 gadi atpakaļ
vecāks
revīzija
4a07d5e1f3

+ 4 - 1
apps/emqx_authn/src/enhanced_authn/emqx_enhanced_authn_scram_mnesia.erl

@@ -41,7 +41,10 @@
         , list_users/2
         ]).
 
+-export([format_user_info/1]).
+
 -define(TAB, ?MODULE).
+-define(FORMAT_FUN, {?MODULE, format_user_info}).
 
 -export([mnesia/1]).
 
@@ -195,7 +198,7 @@ lookup_user(UserID, #{user_group := UserGroup}) ->
 
 list_users(PageParams, #{user_group := UserGroup}) ->
     MatchSpec = [{{user_info, {UserGroup, '_'}, '_', '_', '_', '_'}, [], ['$_']}],
-    {ok, emqx_mgmt_api:paginate(?TAB, MatchSpec, PageParams, fun format_user_info/1)}.
+    {ok, emqx_mgmt_api:paginate(?TAB, MatchSpec, PageParams, ?FORMAT_FUN)}.
 
 %%------------------------------------------------------------------------------
 %% Internal functions

+ 4 - 1
apps/emqx_authn/src/simple_authn/emqx_authn_mnesia.erl

@@ -42,6 +42,8 @@
         , list_users/2
         ]).
 
+-export([format_user_info/1]).
+
 -type user_id_type() :: clientid | username.
 
 -type user_group() :: {binary(), binary()}.
@@ -61,6 +63,7 @@
 -boot_mnesia({mnesia, [boot]}).
 
 -define(TAB, ?MODULE).
+-define(FORMAT_FUN, {?MODULE, format_user_info}).
 
 %%------------------------------------------------------------------------------
 %% Mnesia bootstrap
@@ -244,7 +247,7 @@ lookup_user(UserID, #{user_group := UserGroup}) ->
 
 list_users(PageParams, #{user_group := UserGroup}) ->
     MatchSpec = [{{user_info, {UserGroup, '_'}, '_', '_', '_'}, [], ['$_']}],
-    {ok, emqx_mgmt_api:paginate(?TAB, MatchSpec, PageParams, fun format_user_info/1)}.
+    {ok, emqx_mgmt_api:paginate(?TAB, MatchSpec, PageParams, ?FORMAT_FUN)}.
 
 %%------------------------------------------------------------------------------
 %% Internal functions

+ 22 - 18
apps/emqx_authz/src/emqx_authz_api_mnesia.erl

@@ -66,6 +66,9 @@
                                         }
                                      ]
                            }).
+-define(FORMAT_USERNAME_FUN, {?MODULE, format_by_username}).
+-define(FORMAT_CLIENTID_FUN, {?MODULE, format_by_clientid}).
+
 
 -export([ api_spec/0
         , purge/2
@@ -76,6 +79,9 @@
         , all/2
         ]).
 
+-export([ format_by_username/1
+        , format_by_clientid/1]).
+
 api_spec() ->
     {[ purge_api()
      , users_api()
@@ -507,15 +513,7 @@ users(get, #{query_string := PageParams}) ->
                   fun({?ACL_TABLE, {?ACL_TABLE_USERNAME, Username}, Rules}) ->
                           [{username, Username}, {rules, Rules}]
                   end),
-    Format = fun ([{username, Username}, {rules, Rules}]) ->
-                #{username => Username,
-                  rules => [ #{topic => Topic,
-                               action => Action,
-                               permission => Permission
-                              } || {Permission, Action, Topic} <- Rules]
-                 }
-             end,
-    {200, emqx_mgmt_api:paginate(?ACL_TABLE, MatchSpec, PageParams, Format)};
+    {200, emqx_mgmt_api:paginate(?ACL_TABLE, MatchSpec, PageParams, ?FORMAT_USERNAME_FUN)};
 users(post, #{body := Body}) when is_list(Body) ->
     lists:foreach(fun(#{<<"username">> := Username, <<"rules">> := Rules}) ->
                       mria:dirty_write(#emqx_acl{
@@ -530,15 +528,7 @@ clients(get, #{query_string := PageParams}) ->
                   fun({?ACL_TABLE, {?ACL_TABLE_CLIENTID, Clientid}, Rules}) ->
                           [{clientid, Clientid}, {rules, Rules}]
                   end),
-    Format = fun ([{clientid, Clientid}, {rules, Rules}]) ->
-                #{clientid => Clientid,
-                  rules => [ #{topic => Topic,
-                               action => Action,
-                               permission => Permission
-                              } || {Permission, Action, Topic} <- Rules]
-                 }
-             end,
-    {200, emqx_mgmt_api:paginate(?ACL_TABLE, MatchSpec, PageParams, Format)};
+    {200, emqx_mgmt_api:paginate(?ACL_TABLE, MatchSpec, PageParams, ?FORMAT_CLIENTID_FUN)};
 clients(post, #{body := Body}) when is_list(Body) ->
     lists:foreach(fun(#{<<"clientid">> := Clientid, <<"rules">> := Rules}) ->
                       mria:dirty_write(#emqx_acl{
@@ -635,6 +625,20 @@ format_rules(Rules) when is_list(Rules) ->
                    AccIn ++ [{ atom(Permission), atom(Action), Topic }]
                 end, [], Rules).
 
+format_by_username([{username, Username}, {rules, Rules}]) ->
+    #{username => Username,
+      rules => [ #{topic => Topic,
+                   action => Action,
+                   permission => Permission
+                  } || {Permission, Action, Topic} <- Rules]
+     }.
+format_by_clientid([{clientid, Clientid}, {rules, Rules}]) ->
+    #{clientid => Clientid,
+      rules => [ #{topic => Topic,
+                   action => Action,
+                   permission => Permission
+                  } || {Permission, Action, Topic} <- Rules]
+     }.
 atom(B) when is_binary(B) ->
     try binary_to_existing_atom(B, utf8)
     catch

+ 4 - 4
apps/emqx_management/src/emqx_mgmt_api.erl

@@ -32,7 +32,7 @@
 
 -export([do_query/6]).
 
-paginate(Tables, Params, RowFun) ->
+paginate(Tables, Params, {Module, FormatFun}) ->
     Qh = query_handle(Tables),
     Count = count(Tables),
     Page = b2i(page(Params)),
@@ -47,9 +47,9 @@ paginate(Tables, Params, RowFun) ->
     Rows = qlc:next_answers(Cursor, Limit),
     qlc:delete_cursor(Cursor),
     #{meta  => #{page => Page, limit => Limit, count => Count},
-      data  => [RowFun(Row) || Row <- Rows]}.
+      data  => [Module:FormatFun(Row) || Row <- Rows]}.
 
-paginate(Tables, MatchSpec, Params, RowFun) ->
+paginate(Tables, MatchSpec, Params, {Module, FormatFun}) ->
     Qh = query_handle(Tables, MatchSpec),
     Count = count(Tables, MatchSpec),
     Page = b2i(page(Params)),
@@ -64,7 +64,7 @@ paginate(Tables, MatchSpec, Params, RowFun) ->
     Rows = qlc:next_answers(Cursor, Limit),
     qlc:delete_cursor(Cursor),
     #{meta  => #{page => Page, limit => Limit, count => Count},
-      data  => [RowFun(Row) || Row <- Rows]}.
+      data  => [Module:FormatFun(Row) || Row <- Rows]}.
 
 query_handle(Table) when is_atom(Table) ->
     qlc:q([R || R <- ets:table(Table)]);

+ 3 - 1
apps/emqx_management/src/emqx_mgmt_api_banned.erl

@@ -39,6 +39,8 @@
 -export([format/1]).
 
 -define(TAB, emqx_banned).
+-define(FORMAT_FUN, {?MODULE, format}).
+
 
 api_spec() ->
     {[banned_api(), delete_banned_api()], []}.
@@ -98,7 +100,7 @@ delete_banned_api() ->
     {Path, MetaData, delete_banned}.
 
 banned(get, #{query_string := Params}) ->
-    Response = emqx_mgmt_api:paginate(?TAB, Params, fun format/1),
+    Response = emqx_mgmt_api:paginate(?TAB, Params, ?FORMAT_FUN),
     {200, Response};
 banned(post, #{body := Body}) ->
     _ = emqx_banned:create(emqx_banned:parse(Body)),

+ 4 - 1
apps/emqx_modules/src/emqx_delayed.erl

@@ -49,6 +49,8 @@
         , delete_delayed_message/1
         ]).
 
+-export([format_delayed/1]).
+
 -record(delayed_message, {key, delayed, msg}).
 
 %% sync ms with record change
@@ -58,6 +60,7 @@
 -define(TAB, ?MODULE).
 -define(SERVER, ?MODULE).
 -define(MAX_INTERVAL, 4294967).
+-define(FORMAT_FUN, {?MODULE, format_delayed}).
 
 %%--------------------------------------------------------------------
 %% Mnesia bootstrap
@@ -124,7 +127,7 @@ set_max_delayed_messages(Max) ->
     gen_server:call(?SERVER, {set_max_delayed_messages, Max}).
 
 list(Params) ->
-    emqx_mgmt_api:paginate(?TAB, Params, fun format_delayed/1).
+    emqx_mgmt_api:paginate(?TAB, Params, ?FORMAT_FUN).
 
 format_delayed(Delayed) ->
     format_delayed(Delayed, false).