blob: 26a19bc0ff0a6b0b442251a263976507b3f028dd [file] [log] [blame]
% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
% http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.
-module(mango_httpd_handlers).
-export([url_handler/1, db_handler/1, design_handler/1, handler_info/3]).
url_handler(_) -> no_match.
db_handler(<<"_index">>) -> fun mango_httpd:handle_req/2;
db_handler(<<"_explain">>) -> fun mango_httpd:handle_req/2;
db_handler(<<"_find">>) -> fun mango_httpd:handle_req/2;
db_handler(_) -> no_match.
design_handler(_) -> no_match.
handler_info('GET', [Db, <<"_index">>], _) ->
{'db.mango.index.read', #{'db.name' => Db}};
handler_info('POST', [Db, <<"_index">>], _) ->
{'db.mango.index.create', #{'db.name' => Db}};
handler_info('POST', [Db, <<"_index">>, <<"_bulk_delete">>], _) ->
{'db.mango.index.delete', #{'db.name' => Db, multi => true}};
handler_info('DELETE', [Db, <<"_index">>, <<"_design">>, Name, Type, Idx], _) ->
{'db.mango.index.delete', #{
'db.name' => Db,
'design.id' => Name,
'index.type' => Type,
'index.name' => Idx
}};
handler_info(M, [Db, <<"_index">>, <<"_design/", N/binary>>, T, I], R) ->
handler_info(M, [Db, <<"_index">>, <<"_design">>, N, T, I], R);
handler_info('POST', [Db, <<"_explain">>], _) ->
{'db.mango.explain.execute', #{'db.name' => Db}};
handler_info('POST', [Db, <<"_find">>], _) ->
{'db.mango.find.execute', #{'db.name' => Db}};
handler_info(_, _, _) ->
no_match.