multiversx_sc_modules/
users.rs1multiversx_sc::imports!();
2
3#[multiversx_sc::module]
12pub trait UsersModule {
13 #[view(getUserId)]
18 #[storage_get("user_id")]
19 fn get_user_id(&self, address: &ManagedAddress) -> usize;
20
21 #[storage_set("user_id")]
22 fn set_user_id(&self, address: &ManagedAddress, user_id: usize);
23
24 #[view(getUserAddress)]
25 #[storage_get("user_address")]
26 fn get_user_address(&self, user_id: usize) -> ManagedAddress;
27
28 #[storage_set("user_address")]
29 fn set_user_address(&self, user_id: usize, address: &ManagedAddress);
30
31 #[view(getNumUsers)]
34 #[storage_get("num_users")]
35 fn get_num_users(&self) -> usize;
36
37 #[storage_set("num_users")]
40 fn set_num_users(&self, num_users: usize);
41
42 fn get_or_create_user(&self, address: &ManagedAddress) -> usize {
43 let mut user_id = self.get_user_id(address);
44 if user_id == 0 {
45 let mut num_users = self.get_num_users();
46 num_users += 1;
47 self.set_num_users(num_users);
48 user_id = num_users;
49 self.set_user_id(address, user_id);
50 self.set_user_address(user_id, address);
51 }
52 user_id
53 }
54
55 #[endpoint(updateUserAddress)]
56 fn update_user_address(&self, addresses: MultiValueEncoded<ManagedAddress>) {
57 for address in &addresses.to_vec() {
58 let user_id = self.get_user_id(&address);
59 require!(user_id > 0, "unknown address");
60 self.set_user_address(user_id, &address);
61 }
62 }
63}