iot/apps/iot/src/http_handler/http_router_handler.erl
2023-03-06 14:26:12 +08:00

74 lines
2.4 KiB
Erlang

%%%-------------------------------------------------------------------
%%% @author licheng5
%%% @copyright (C) 2020, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 26. 4月 2020 3:36 下午
%%%-------------------------------------------------------------------
-module(http_router_handler).
-author("licheng5").
-include("iot.hrl").
%% API
-export([handle_request/4]).
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% helper methods
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
handle_request(_, "/router/list", Params, PostParams) ->
Page0 = maps:get(<<"page">>, Params, <<"1">>),
Size0 = maps:get(<<"size">>, Params, <<"10">>),
Page = binary_to_integer(Page0),
Size = binary_to_integer(Size0),
true = Page > 0 andalso Size > 0,
Start = (Page - 1) * Size,
%% 处理查询条件
Name = maps:get(<<"name">>, PostParams, <<"">>),
MatchHead = #router{name = '$1', _ = '_'},
Guard = [],
Guard1 = case Name =/= <<"">> of
true ->
[{'=:=', '$1', Name}|Guard];
false ->
Guard
end,
Result = ['$_'],
case router_model:get_routers({MatchHead, Guard1, Result}, Start, Size) of
{ok, Routers, TotalNum} ->
Response = #{
<<"routers">> => lists:map(fun(R) -> router_model:to_map(R) end, Routers),
<<"total_num">> => TotalNum
},
{ok, 200, iot_util:json_data(Response)};
{error, Reason} ->
lager:warning("[host_handler] get a error: ~p", [Reason]),
{ok, 200, iot_util:json_error(404, <<"database error">>)}
end;
handle_request("GET", "/router/detail", #{<<"router_id">> := RouterId}, _) ->
case router_model:get_router(RouterId) of
undefined ->
{ok, 200, iot_util:json_error(404, <<"router not found">>)};
{ok, Router} ->
RouterInfo = router_model:to_map(Router),
{ok, 200, iot_util:json_data(RouterInfo)}
end;
handle_request("POST", "/router/changer_status", _, Params = #{<<"router_id">> := RouterId, <<"status">> := NStatus}) ->
lager:debug("[router_handler] post params is: ~p", [Params]),
case router_model:change_status(RouterId, NStatus) of
ok ->
{ok, 200, iot_util:json_data(<<"success">>)};
{error, _} ->
{ok, 200, iot_util:json_error(404, <<"error">>)}
end.