summaryrefslogtreecommitdiff |
diff options
Diffstat (limited to 'src/bounty/struct/bnt_bounty.erl')
-rw-r--r-- | src/bounty/struct/bnt_bounty.erl | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/bounty/struct/bnt_bounty.erl b/src/bounty/struct/bnt_bounty.erl new file mode 100644 index 0000000..0d7df47 --- /dev/null +++ b/src/bounty/struct/bnt_bounty.erl @@ -0,0 +1,93 @@ +-module(bnt_bounty). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% TYPES %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-type id() :: ataxia_id:type(). +-type job() :: {atom(), atom(), list(any())}. + +-record +( + bounty, + { + deadline :: ataxia_time:type(), + user :: ataxia_security:user(), + job :: job() + } +). + +-type type() :: #bounty{}. + +-export_type([type/0, id/0]). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-export +( + [ + generate/4, + execute/1 + ] +). + +-export +( + [ + get_deadline/1, + get_user/1, + get_job/1 + ] +). + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% LOCAL FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% EXPORTED FUNCTIONS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-spec generate + ( + ataxia_security:user(), + ataxia_time:type(), + ataxia_time:type(), + job() + ) + -> 'ok'. +generate (User, NotBefore, Deadline, Job) -> + Janitor = ataxia_security:janitor(), + JanitorOnly = ataxia_security:allow_only(Janitor), + + Bounty = + { + deadline = Deadline, + user = User, + job = Job + }, + + {ok, _BountyID} = + ataxia_client:add + ( + bounty_db, + JanitorOnly, + JanitorOnly, + ataxia_lock:locked(User, NotBefore), + Bounty + ), + + ok. + +-spec execute (type()) -> any(). +execute (Bounty) -> + {Module, Function, Params} = Bounty#bounty.job, + erlang:apply(Module, Function, Params). + +-spec get_deadline (type()) -> ataxia_time:type(). +get_deadline (Bounty) -> Bounty#bounty.deadline. + +-spec get_user (type()) -> ataxia_security:user(). +get_user (Bounty) -> Bounty#bounty.user. + +-spec get_job (type()) -> job(). +get_job (Bounty) -> Bounty#bounty.job. |