From cbe2ff86f1a6873b88e314011ee64b6c25f3359c Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Wed, 5 Feb 2020 22:26:37 -0500 Subject: Extract basics info from strava and display it --- src/db.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 52 insertions(+), 10 deletions(-) (limited to 'src/db.rs') diff --git a/src/db.rs b/src/db.rs index 5865231..ed1ce4d 100644 --- a/src/db.rs +++ b/src/db.rs @@ -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 Result { - 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, .get_results::(conn)?; Ok(rows) } + +pub fn get_entries(conn: &PgConnection, username: &str) -> Result, Error> { + use crate::schema::entries; + let r = entries::table + .filter(entries::username.eq(username)) + .get_results::(conn)?; + Ok(r) +} + +// pub fn get_entries_with_data( +// conn: &PgConnection, +// username: &str, +// ) -> Result, 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::>(conn)?; +// Ok(r) +// } -- cgit v1.2.3