diff --git a/packages/backend/native-utils/crates/database/src/lib.rs b/packages/backend/native-utils/crates/database/src/lib.rs index e92d6bcfce..5506c702a2 100644 --- a/packages/backend/native-utils/crates/database/src/lib.rs +++ b/packages/backend/native-utils/crates/database/src/lib.rs @@ -28,7 +28,7 @@ mod tests { use super::get_database; #[test] - fn can_get_mock_without_initialization() { - assert!(get_database().is_ok()); + fn can_get_mock() { + get_database().unwrap().as_mock_connection(); } } diff --git a/packages/backend/native-utils/crates/util/Cargo.toml b/packages/backend/native-utils/crates/util/Cargo.toml new file mode 100644 index 0000000000..8010d27f43 --- /dev/null +++ b/packages/backend/native-utils/crates/util/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "util" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +chrono = "0.4.24" +radix_fmt = "1.0.0" +rand = "0.8.5" diff --git a/packages/backend/native-utils/crates/util/src/id.rs b/packages/backend/native-utils/crates/util/src/id.rs new file mode 100644 index 0000000000..3dc713668b --- /dev/null +++ b/packages/backend/native-utils/crates/util/src/id.rs @@ -0,0 +1,31 @@ +use chrono::{DateTime, Utc}; +use radix_fmt::radix_36; + +const TIME_2000: i64 = 946_684_800_000; + +/// FIXME: Should we continue aid, or use other (more secure and scalable) guids +/// such as [Cuid2](https://github.com/paralleldrive/cuid2)? +pub fn create_aid(date: DateTime) -> String { + let time = date.timestamp_millis() - TIME_2000; + let time = if time < 0 { 0 } else { time }; + let num: i16 = rand::random(); + let mut noise = format!("{:0>2}", radix_36(num).to_string()); + let noise = noise.split_off(noise.len() - 2); + format!("{:0>8}{}", radix_36(time).to_string(), noise,) +} + +#[cfg(test)] +mod tests { + use chrono::{TimeZone, Utc}; + + use super::create_aid; + + #[test] + fn generate_aid() { + let date = Utc.with_ymd_and_hms(2023, 5, 25, 11, 49, 37).unwrap(); + let aid = create_aid(date); + assert_eq!(aid.len(), 10); + assert!(aid.starts_with("9f6mynag")); + assert_ne!(create_aid(Utc::now()), create_aid(Utc::now())); + } +} diff --git a/packages/backend/native-utils/crates/util/src/lib.rs b/packages/backend/native-utils/crates/util/src/lib.rs new file mode 100644 index 0000000000..fd6bb6c432 --- /dev/null +++ b/packages/backend/native-utils/crates/util/src/lib.rs @@ -0,0 +1 @@ +pub mod id;