bson
This commit is contained in:
parent
e4ec306277
commit
21adfaee13
3 changed files with 121 additions and 11 deletions
7
Cargo.lock
generated
7
Cargo.lock
generated
|
@ -474,6 +474,7 @@ name = "cdb"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"actix-web",
|
"actix-web",
|
||||||
|
"chrono",
|
||||||
"env_logger",
|
"env_logger",
|
||||||
"futures",
|
"futures",
|
||||||
"log",
|
"log",
|
||||||
|
@ -496,16 +497,16 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "chrono"
|
name = "chrono"
|
||||||
version = "0.4.31"
|
version = "0.4.38"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f2c685bad3eb3d45a01354cedb7d5faa66194d1d58ba6e267a8de788f79db38"
|
checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"android-tzdata",
|
"android-tzdata",
|
||||||
"iana-time-zone",
|
"iana-time-zone",
|
||||||
"js-sys",
|
"js-sys",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
"windows-targets 0.48.5",
|
"windows-targets 0.52.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
|
|
@ -5,6 +5,7 @@ edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
actix-web = "4.4.1"
|
actix-web = "4.4.1"
|
||||||
|
chrono = "0.4.38"
|
||||||
env_logger = "0.10.1"
|
env_logger = "0.10.1"
|
||||||
futures = "0.3.30"
|
futures = "0.3.30"
|
||||||
log = "0.4.20"
|
log = "0.4.20"
|
||||||
|
|
124
src/item.rs
124
src/item.rs
|
@ -197,13 +197,35 @@ impl Item {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct Price(String);
|
pub struct Price {
|
||||||
|
pub value: f64,
|
||||||
|
pub currency: String,
|
||||||
|
}
|
||||||
|
|
||||||
impl Price {
|
impl Price {
|
||||||
fn new(price: &str) -> Self {
|
fn new(price: &str) -> Self {
|
||||||
// todo : implement
|
// todo : implement
|
||||||
|
|
||||||
Self(price.to_string())
|
Self {
|
||||||
|
value: 0.0,
|
||||||
|
currency: "€".to_string(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn as_bson(&self) -> mongodb::bson::Bson {
|
||||||
|
mongodb::bson::bson!({
|
||||||
|
"value": self.value,
|
||||||
|
"currency": self.currency.clone()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<mongodb::bson::Document> for Price {
|
||||||
|
fn from(value: mongodb::bson::Document) -> Self {
|
||||||
|
Self {
|
||||||
|
value: value.get_f64("value").unwrap(),
|
||||||
|
currency: value.get_str("currency").unwrap().to_string(),
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,16 +240,102 @@ pub struct Variant {
|
||||||
pub variant: String,
|
pub variant: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Transaction {}
|
pub struct BatchTransaction {
|
||||||
|
pub uuid: String,
|
||||||
|
pub transactions: Vec<String>,
|
||||||
|
}
|
||||||
|
|
||||||
impl Transaction {
|
impl BatchTransaction {
|
||||||
pub fn new(item: &str, variant: &str, price: Price, origin: &str) -> Self {
|
pub fn new(transactions: Vec<String>) -> Self {
|
||||||
// todo : implement
|
Self {
|
||||||
Self {}
|
uuid: uuid::Uuid::new_v4().to_string(),
|
||||||
|
transactions,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn as_doc(self) -> mongodb::bson::Document {
|
fn as_doc(self) -> mongodb::bson::Document {
|
||||||
mongodb::bson::doc! {}
|
mongodb::bson::doc! {
|
||||||
|
"uuid": self.uuid,
|
||||||
|
"kind": "batch",
|
||||||
|
"transactions": self.transactions
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from(b: mongodb::bson::Document) -> Self {
|
||||||
|
let uuid = b.get_str("uuid").unwrap().to_string();
|
||||||
|
let transactions = b
|
||||||
|
.get_array("transactions")
|
||||||
|
.unwrap()
|
||||||
|
.into_iter()
|
||||||
|
.map(|x| x.as_str().unwrap().to_string())
|
||||||
|
.collect();
|
||||||
|
Self { uuid, transactions }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum TransactionType {
|
||||||
|
Batch(BatchTransaction),
|
||||||
|
Normal(Transaction),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TransactionType {
|
||||||
|
pub fn from(b: mongodb::bson::Document) -> Self {
|
||||||
|
if let Ok(kind) = b.get_str("kind") {
|
||||||
|
if kind == "batch" {
|
||||||
|
return Self::Batch(BatchTransaction::from(b));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Self::Normal(Transaction::from(b))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Transaction {
|
||||||
|
pub uuid: String,
|
||||||
|
pub item: String,
|
||||||
|
pub variant: String,
|
||||||
|
pub price: Price,
|
||||||
|
pub origin: String,
|
||||||
|
pub timestamp: i64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Transaction {
|
||||||
|
pub fn new(item: &str, variant: &str, price: Price, origin: &str) -> Self {
|
||||||
|
Self {
|
||||||
|
uuid: uuid::Uuid::new_v4().to_string(),
|
||||||
|
item: item.to_string(),
|
||||||
|
variant: variant.to_string(),
|
||||||
|
price,
|
||||||
|
origin: origin.to_string(),
|
||||||
|
timestamp: chrono::Utc::now().timestamp(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn as_doc(self) -> mongodb::bson::Document {
|
||||||
|
mongodb::bson::doc! {
|
||||||
|
"uuid": self.uuid,
|
||||||
|
"item": self.item,
|
||||||
|
"variant": self.variant,
|
||||||
|
"price": self.price.as_bson(),
|
||||||
|
"origin": self.origin,
|
||||||
|
"timestamp": self.timestamp
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from(b: mongodb::bson::Document) -> Self {
|
||||||
|
let uuid = b.get_str("uuid").unwrap().to_string();
|
||||||
|
let item = b.get_str("item").unwrap().to_string();
|
||||||
|
let variant = b.get_str("variant").unwrap().to_string();
|
||||||
|
let origin = b.get_str("origin").unwrap().to_string();
|
||||||
|
let timestamp = b.get_i64("timestamp").unwrap();
|
||||||
|
let price = Price::from(b);
|
||||||
|
Self {
|
||||||
|
uuid,
|
||||||
|
item,
|
||||||
|
variant,
|
||||||
|
price,
|
||||||
|
origin,
|
||||||
|
timestamp,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue