summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornsensfel <SpamShield0@noot-noot.org>2019-01-11 17:43:14 +0100
committernsensfel <SpamShield0@noot-noot.org>2019-01-11 17:43:14 +0100
commit992c6788db73837a503bdc3c8f8a17d6357c224e (patch)
treeae3d5a9fe441e9e889c408f9737ba3a6612374b7 /src/bounty/struct
parente8ab45f453bf095a09672c1685315d8d52472f11 (diff)
Got Dialyzer to yell at me again! Yay!
Diffstat (limited to 'src/bounty/struct')
-rw-r--r--src/bounty/struct/bnt_bounty.erl93
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.