aboutsummaryrefslogtreecommitdiff
path: root/apps/dreki/src/requests/dreki_requests.erl
diff options
context:
space:
mode:
Diffstat (limited to 'apps/dreki/src/requests/dreki_requests.erl')
-rw-r--r--apps/dreki/src/requests/dreki_requests.erl97
1 files changed, 97 insertions, 0 deletions
diff --git a/apps/dreki/src/requests/dreki_requests.erl b/apps/dreki/src/requests/dreki_requests.erl
new file mode 100644
index 0000000..d970dbd
--- /dev/null
+++ b/apps/dreki/src/requests/dreki_requests.erl
@@ -0,0 +1,97 @@
+-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.