From 00c71f6baff136a88805ca2e3f9ef72453ac9f35 Mon Sep 17 00:00:00 2001 From: "Adam T. Carpenter" Date: Fri, 23 Oct 2020 08:10:13 -0400 Subject: moved entities under repo; photos now hold onto just the filename --- dichroism/src/repo/entities/mod.rs | 36 ++++++++++++++++++++++++++++++++++++ dichroism/src/repo/mod.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 dichroism/src/repo/entities/mod.rs create mode 100644 dichroism/src/repo/mod.rs (limited to 'dichroism/src/repo') diff --git a/dichroism/src/repo/entities/mod.rs b/dichroism/src/repo/entities/mod.rs new file mode 100644 index 0000000..2cff899 --- /dev/null +++ b/dichroism/src/repo/entities/mod.rs @@ -0,0 +1,36 @@ +use crate::models; +use crate::schema::products; + +#[derive(Debug, Clone, Identifiable, Queryable, Serialize)] +pub struct Product { + pub id: i32, + pub name: String, + pub description: String, + pub quantity: i32, + pub cents: i32, + pub featured: i32, + pub original: String, + pub fullsize: String, + pub base: String, + pub thumbnail: String, +} + +impl Into for Product { + fn into(self) -> models::Product { + models::Product { + id: self.id as u32, + name: self.name, + description: self.description, + quantity: self.quantity as u32, + cents: self.cents as u32, + featured: self.featured != 0, // TODO: is this safe? + category: String::new(), // TODO: real category + photo_set: models::PhotoSet::from_photos( + models::Photo::from_filename(self.original), + models::Photo::from_filename(self.fullsize), + models::Photo::from_filename(self.base), + models::Photo::from_filename(self.thumbnail), + ), + } + } +} diff --git a/dichroism/src/repo/mod.rs b/dichroism/src/repo/mod.rs new file mode 100644 index 0000000..0df8aad --- /dev/null +++ b/dichroism/src/repo/mod.rs @@ -0,0 +1,28 @@ +use crate::models; +use crate::schema::*; +use diesel::prelude::*; +use diesel::result::Error; + +mod entities; + +type DBConn = SqliteConnection; + +pub fn read_products(conn: &DBConn) -> Result, Error> { + let query = products::table.inner_join(photo_sets::table).select(( + products::id, + products::name, + products::description, + products::quantity, + products::cents, + products::featured, + photo_sets::original, + photo_sets::fullsize, + photo_sets::base, + photo_sets::thumbnail, + )); + Ok(query + .load::(conn)? + .into_iter() + .map(|p| p.into()) + .collect::>()) +} -- cgit v1.2.3