1:- module(bc_data_config, [
2 bc_config_get/2, 3 bc_config_set/2, 4 bc_config_set_api/3, 5 bc_config_set_list_api/2, 6 bc_config_list/2, 7 bc_config_dict/1 8]). 9
10:- use_module(library(debug)). 11:- use_module(library(docstore)).
19bc_config_get(Name, Value):-
20 ( ds_find(config, name=Name, [Doc])
21 -> Value = Doc.value
22 ; throw(error(no_config(Name)))).
29bc_config_set_api(Actor, Name, Value):-
30 config_access(Actor),
31 bc_config_set(Name, Value).
38bc_config_set_list_api(Actor, List):-
39 config_access(Actor),
40 maplist(config_set_dict, List).
41
42config_set_dict(Dict):-
43 bc_config_set(Dict.name, Dict.value).
44
45config_access(Actor):-
46 Actor.type = admin, !.
47
48config_access(_):-
49 throw(error(no_access)).
56bc_config_set(Name, Value):-
57 debug(bc_data, 'setting ~w to ~p', [Name, Value]),
58 ( ds_find(config, name=Name, [Doc])
59 -> put_dict(value, Doc, Value, New),
60 ds_update(New)
61 ; ds_insert(config{ name: Name, value: Value })).
69bc_config_list(Actor, List):-
70 config_access(Actor),
71 ds_all(config, List).
78bc_config_dict(Dict):-
79 ds_all(config, List),
80 build_dict(List, _{}, Dict).
81
82build_dict([Entry|List], Acc, Dict):-
83 Tmp = Acc.put(Entry.name, Entry.value),
84 build_dict(List, Tmp, Dict).
85
86build_dict([], Dict, Dict)