use std::collections::HashMap;
use serde_json::Value;
use crate::error::Result;
use crate::sql_builder::SqlBuilder;
pub struct SkuQuery<'a> {
conn: &'a crate::connection::Connection,
}
impl<'a> SkuQuery<'a> {
pub fn new(conn: &'a crate::connection::Connection) -> Self {
Self { conn }
}
pub fn get(&self, uuid: &str) -> Result<Vec<Value>> {
self.conn.ensure_views(&["tcgplayer_skus"])?;
let (sql, params) = SqlBuilder::new("tcgplayer_skus")
.where_eq("uuid", uuid)
.build();
let rows = self.conn.execute(&sql, ¶ms)?;
Ok(rows_to_values(rows))
}
pub fn find_by_sku_id(&self, sku_id: &str) -> Result<Vec<Value>> {
self.conn.ensure_views(&["tcgplayer_skus"])?;
let (sql, params) = SqlBuilder::new("tcgplayer_skus")
.where_eq("skuId", sku_id)
.build();
let rows = self.conn.execute(&sql, ¶ms)?;
Ok(rows_to_values(rows))
}
pub fn find_by_product_id(&self, product_id: &str) -> Result<Vec<Value>> {
self.conn.ensure_views(&["tcgplayer_skus"])?;
let (sql, params) = SqlBuilder::new("tcgplayer_skus")
.where_eq("productId", product_id)
.build();
let rows = self.conn.execute(&sql, ¶ms)?;
Ok(rows_to_values(rows))
}
}
fn rows_to_values(rows: Vec<HashMap<String, Value>>) -> Vec<Value> {
rows.into_iter()
.map(|r| serde_json::to_value(r).unwrap_or(Value::Null))
.collect()
}