1:- module(bc_api_user, []).
5:- use_module(library(arouter)). 6:- use_module(library(dict_schema)). 7
8:- use_module(bc_api_io). 9:- use_module(bc_api_auth). 10:- use_module(bc_api_actor). 11:- use_module(bc_data_user). 12
14
15:- route_post(api/user,
16 bc_auth, user_save). 17
18user_save:-
19 bc_read_by_schema(bc_user, User),
20 bc_actor(Actor),
21 bc_user_save(Actor, User, Id),
22 bc_reply_success(Id).
23
25
26:- route_put(api/user/Id,
27 bc_auth, user_update(Id)). 28
29user_update(Id):-
30 bc_read_by_schema(bc_user, User),
31 put_dict('$id', User, Id, Update),
32 bc_actor(Actor),
33 bc_user_update(Actor, Update),
34 bc_reply_success(Id).
35
37
38:- route_del(api/user/Id,
39 bc_auth, user_remove(Id)). 40
41user_remove(Id):-
42 bc_actor(Actor),
43 bc_user_remove(Actor, Id),
44 bc_reply_success(Id).
45
47
48:- route_get(api/users,
49 bc_auth, users_list). 50
51users_list:-
52 bc_actor(Actor),
53 bc_user_list(Actor, Users),
54 bc_reply_success(Users).
55
57
58:- route_get(api/user/Id,
59 bc_auth, user_get(Id)). 60
61user_get(Id):-
62 bc_actor(Actor),
63 bc_user(Actor, Id, User),
64 bc_reply_success(User).
65
67
68:- route_get(api/user/info,
69 bc_auth, user_info). 70
71user_info:-
72 bc_actor(User),
73 bc_reply_success(_{
74 '$id': User.'$id',
75 type: User.type,
76 username: User.username,
77 fullname: User.fullname }).
78
80
81:- register_schema(bc_user, _{
82 type: dict,
83 tag: user,
84 keys: _{
85 fullname: _{ type: atom, min_length: 1 },
86 username: _{ type: atom, min_length: 1 },
87 password: _{ type: atom, min_length: 6 },
88 comment_notifications: bool,
89 type: _{ type: atom, min_length: 1, max_length: 100 },
90 link: string
91 },
92 optional: [ password ]
93}).
User management API handlers */