diff options
Diffstat (limited to 'dichroism/src/repo/product_repo.rs')
-rw-r--r-- | dichroism/src/repo/product_repo.rs | 82 |
1 files changed, 0 insertions, 82 deletions
diff --git a/dichroism/src/repo/product_repo.rs b/dichroism/src/repo/product_repo.rs deleted file mode 100644 index 487f96e..0000000 --- a/dichroism/src/repo/product_repo.rs +++ /dev/null @@ -1,82 +0,0 @@ -use super::entities::*; -use super::DBConn; -use crate::models; -use diesel::{insert_into, prelude::*, result::Error, update}; - -pub fn store(conn: &DBConn, mut product: models::Product) -> Result<models::Product, Error> { - use crate::schema::products::dsl::*; - if let Some(product_id) = product.id { - // update - let form = ProductForm::from(product.clone()); - update(products.filter(id.eq(product_id))) - .set(&form) - .execute(conn)?; - } else { - // insert - product.id = Some(find_next_id(conn)); - let form = ProductForm::from(product.clone()); - insert_into(products).values(&form).execute(conn)?; - } - - Ok(product) -} - -pub fn find_all(conn: &DBConn) -> Result<Vec<models::Product>, Error> { - use crate::schema::*; - let query = products::table.inner_join(photo_sets::table).select(( - products::id, - products::name, - products::description, - products::quantity, - products::cents, - products::featured, - products::category, - photo_sets::id, - photo_sets::original, - photo_sets::fullsize, - photo_sets::base, - photo_sets::thumbnail, - )); - Ok(query - .load::<Product>(conn)? - .into_iter() - .map(|p| p.into()) - .collect::<Vec<models::Product>>()) -} - -pub fn find(conn: &DBConn, dbid: i32) -> Result<Option<models::Product>, Error> { - use crate::schema::*; - let query = products::table - .inner_join(photo_sets::table) - .filter(products::id.eq(dbid)) - .select(( - products::id, - products::name, - products::description, - products::quantity, - products::cents, - products::featured, - products::category, - photo_sets::id, - photo_sets::original, - photo_sets::fullsize, - photo_sets::base, - photo_sets::thumbnail, - )); - let product = query.first::<Product>(conn).map(|p| p.into()); - match product { - Ok(p) => Ok(Some(p)), - Err(Error::NotFound) => Ok(None), - Err(e) => Err(e), - } -} - -fn find_next_id(conn: &DBConn) -> i32 { - use crate::schema::products::dsl::*; - let last_id = products - .select(id) - .order(id.desc()) - .first::<i32>(conn) - .unwrap_or(0); - last_id + 1 -} |