-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.