aboutsummaryrefslogblamecommitdiff
path: root/apps/dreki/src/requests/dreki_requests.erl
blob: d970dbda61d03aaf230b327dbe0048f832ee3cd3 (plain) (tree)
































































































                                                                                                                          
-module(dreki_requests).
-behaviour(dreki_store_namespace).
-export([start/0, version/0, valid_store/4, format_item/1, actions/0, actions/1, schemas/0, new/0, as_tuple/1, as_map/1]).
-export([record_name/0, record_attributes/0]).
-export([after_create/1]).
-export([new/1, create/2]).
-export([install/0]).

-record(?MODULE, {
                  id,
                  version,
                  schema,
                  task_urn,
                  identity_urn,
                  node,
                  params
           }).

create(#{'@ns' := <<"tasks">>, '@location' := Loc, '@id' := TaskUrn}, Params0) ->
    LocalStore = <<Loc/binary, "::requests:local">>,
    Params = Params0#{task_urn => TaskUrn},
    dreki_store:create(LocalStore, Params).

install() ->
    NodeUrn = dreki_node:urn(),
    Urn = <<NodeUrn/binary, "::requests:local">>,
    dreki_store:create_store(Urn, dreki_mnesia_store, #{}, #{}).

record_name() ->
    ?MODULE.

record_attributes() ->
    record_info(fields, ?MODULE).

version() ->
    1.

start() ->
    ok.

valid_store(_Ns, _Loc, _Name, _BackendMod) ->
    ok.

format_item(Item) ->
    ok.

actions() ->
    [].

actions(_) ->
    [].

schemas() ->
  #{default => <<"request">>,
    <<"request">> => #{
      default_version => <<"1.0">>,
      <<"1.0">> => schemas(<<"request">>, <<"1.0">>)
    }
  }.

schemas(<<"request">>, <<"1.0">>) ->
    #{
      version => 'draft-06',
      title => <<"Run Request">>,
      type => object,
      properties => #{
                      id => #{type => string, <<"dreki:form">> => #{readonly => true}},
                      node => #{type => string},
                      params => #{type => object}
                     },
      required => [node, params]
     }.

new() ->
    schemas(<<"request">>, <<"1.0">>).

new(#{'@ns' := <<"tasks">>, '@id' := TaskUrn, id := TaskId, module := Module, params := TaskParams}) ->
    Schema0 = schemas(<<"request">>, <<"1.0">>),
    Schema = key_value:set([properties, params], TaskParams, Schema0),
    {ok, Schema}.

as_tuple(#{id := Id, task_urn := TaskUrn, node := Node, params := Params}) ->
    #?MODULE{id = Id, version = undefined, schema = undefined, task_urn = TaskUrn,
      node = Node, params = Params}.

as_map(R = #?MODULE{}) ->
    #{
      id => R#?MODULE.id,
      version => R#?MODULE.version,
      schema => R#?MODULE.schema,
      task_urn => R#?MODULE.task_urn,
      node => R#?MODULE.node,
      params => R#?MODULE.params
     }.

after_create(Request) ->
    ok.