diff options
Diffstat (limited to 'src/db.rs')
-rw-r--r-- | src/db.rs | 62 |
1 files changed, 52 insertions, 10 deletions
@@ -1,3 +1,4 @@ +use crate::diesel::BoolExpressionMethods; use crate::error::Error; use crate::models; use bcrypt; @@ -6,7 +7,7 @@ use chrono::Utc; use diesel::connection::Connection; use diesel::pg::PgConnection; use diesel::ExpressionMethods; -use diesel::Insertable; +use diesel::JoinOnDsl; use diesel::QueryDsl; use diesel::RunQueryDsl; @@ -44,10 +45,6 @@ macro_rules! insert { i64 ) }; - - (entry_data <= $conn:expr, $values:expr) => { - insert!($conn, schema::entry_data::table, $values) - }; } pub fn create_config(conn: &PgConnection, config: &models::Config) -> Result<(), Error> { @@ -203,13 +200,24 @@ pub fn insert_data(conn: &PgConnection, data: &models::RawData) -> Result<usize, Ok(rows) } -pub fn insert_entry_data( +pub fn link_data( conn: &PgConnection, - entry_data: &models::EntryData, + data: models::RawData, + entry_type: &str, + entry_id: i64, ) -> Result<usize, Error> { - use crate::schema::entry_data; - let rows = diesel::insert_into(entry_data::table) - .values(entry_data) + use crate::schema::raw_data; + let target = raw_data::table.filter( + raw_data::data_type + .eq(data.data_type) + .and(raw_data::id.eq(data.id)), + ); + + let rows = diesel::update(target) + .set(( + raw_data::entry_type.eq(Some(entry_type)), + raw_data::entry_id.eq(Some(entry_id)), + )) .execute(conn)?; Ok(rows) } @@ -232,3 +240,37 @@ pub fn get_raw_data_keys(conn: &PgConnection) -> Result<Vec<models::RawDataKey>, .get_results::<models::RawDataKey>(conn)?; Ok(rows) } + +pub fn get_entries(conn: &PgConnection, username: &str) -> Result<Vec<models::Entry>, Error> { + use crate::schema::entries; + let r = entries::table + .filter(entries::username.eq(username)) + .get_results::<models::Entry>(conn)?; + Ok(r) +} + +// pub fn get_entries_with_data( +// conn: &PgConnection, +// username: &str, +// ) -> Result<Vec<(models::Entry, models::EntryData, models::RawData)>, Error> { +// use crate::schema::entries; +// use crate::schema::entry_data; +// use crate::schema::raw_data; + +// let r = entries::table +// .filter(entries::username.eq(username)) +// .left_join( +// entry_data::table.on(entries::username.eq(entry_data::username).and( +// entries::entry_type +// .eq(entry_data::entry_type) +// .and(entries::id.eq(entry_data::entry_id)), +// )), +// ) +// .left_join( +// raw_data::table.on(entry_data::data_type +// .eq(raw_data::data_type) +// .and(entry_data::data_id.eq(raw_data::id))), +// ) +// .get_results::<Vec<(models::Entry, models::EntryData, models::RawData)>>(conn)?; +// Ok(r) +// } |