|
1 | | -use crate::usage::types::state::UserUsage; |
2 | | -use crate::usage::utils::build_user_usage_key; |
| 1 | +use crate::usage::types::state::{UserUsage, UserUsageKey}; |
3 | 2 | use crate::{get_doc_store, set_doc_store, SetDoc}; |
4 | 3 | use ic_cdk::id; |
5 | 4 | use junobuild_collections::types::core::CollectionKey; |
6 | 5 | use junobuild_shared::types::state::UserId; |
7 | 6 | use junobuild_utils::{decode_doc_data, encode_doc_data}; |
| 7 | +use junobuild_collections::constants::USER_USAGE_COLLECTION_KEY; |
| 8 | +use crate::types::state::CollectionType; |
8 | 9 |
|
9 | 10 | pub fn increment_usage( |
10 | | - user_usage_collection: &CollectionKey, |
11 | | - collection: &CollectionKey, |
| 11 | + collection_key: &CollectionKey, |
| 12 | + collection_type: &CollectionType, |
12 | 13 | user_id: &UserId, |
13 | 14 | ) -> Result<UserUsage, String> { |
14 | | - let key = build_user_usage_key(user_id, collection); |
| 15 | + let user_usage_key = UserUsageKey::create(user_id, collection_key, collection_type); |
| 16 | + let key = user_usage_key.to_key(); |
15 | 17 |
|
16 | | - let doc = get_doc_store(id(), user_usage_collection.to_string(), key.clone())?; |
| 18 | + let doc = get_doc_store(id(), USER_USAGE_COLLECTION_KEY.to_string(), key.clone())?; |
17 | 19 |
|
18 | | - let current_usage: Option<UserUsage> = match &doc { |
19 | | - None => None, |
20 | | - Some(doc) => decode_doc_data(&doc.data)?, |
21 | | - }; |
| 20 | + let current_usage = doc.as_ref().map(|doc| decode_doc_data(&doc.data)).transpose()?; |
22 | 21 |
|
23 | 22 | let update_usage = UserUsage::increment(¤t_usage); |
24 | 23 |
|
25 | | - let update_doc: SetDoc = SetDoc { |
| 24 | + let update_doc = SetDoc { |
26 | 25 | data: encode_doc_data(&update_usage)?, |
27 | | - description: match &doc { |
28 | | - None => None, |
29 | | - Some(doc) => doc.description.clone(), |
30 | | - }, |
31 | | - version: match &doc { |
32 | | - None => None, |
33 | | - Some(doc) => doc.version.clone(), |
34 | | - }, |
| 26 | + description: doc.as_ref().and_then(|d| d.description.clone()), |
| 27 | + version: doc.as_ref().and_then(|d| d.version.clone()), |
35 | 28 | }; |
36 | 29 |
|
37 | | - set_doc_store(id(), user_usage_collection.to_string(), key, update_doc)?; |
| 30 | + set_doc_store(id(), USER_USAGE_COLLECTION_KEY.to_string(), key, update_doc)?; |
38 | 31 |
|
39 | 32 | Ok(update_usage) |
40 | 33 | } |
0 commit comments