From 02eca80d8e357e80585f766b873ef3efceabfe42 Mon Sep 17 00:00:00 2001 From: Kjetil Orbekk Date: Tue, 11 Feb 2020 20:32:29 -0500 Subject: Import detailed activities from Strava --- src/db.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/db.rs') diff --git a/src/db.rs b/src/db.rs index 5b165c9..7e271bc 100644 --- a/src/db.rs +++ b/src/db.rs @@ -137,6 +137,16 @@ pub fn get_strava_token( Ok(token) } +pub fn update_strava_token( + conn: &PgConnection, + token: &models::StravaToken) -> Result<(), Error> { + use crate::schema::strava_tokens; + diesel::update(strava_tokens::table).set(token) + .execute(conn)?; + Ok(()) +} + + pub fn insert_task(conn: &PgConnection, task: &models::NewTask) -> Result { use crate::schema::tasks; let id = diesel::insert_into(tasks::table) @@ -192,6 +202,25 @@ pub fn take_task( }) } +pub fn find_missing_data(conn: &PgConnection, username: &str, data_type: models::DataType, ids: &[i64]) + -> Result, Error> { + use diesel::pg::expression::dsl::any; + use crate::schema::raw_data; + use std::collections::HashSet; + + let present: HashSet = raw_data::table + .select(raw_data::id) + .filter(raw_data::username.eq(username) + .and(raw_data::data_type.eq(data_type)) + .and(raw_data::id.eq(any(ids)))) + .get_results::(conn)? + .into_iter().collect(); + + let ids: HashSet = ids.iter().map(|v| *v).collect(); + let missing = ids.difference(&present); + Ok(missing.map(|v| *v).collect()) +} + pub fn insert_data(conn: &PgConnection, data: &models::RawData) -> Result { use crate::schema::raw_data; let rows = diesel::insert_into(raw_data::table) @@ -253,6 +282,7 @@ pub fn get_entries( .eq(username) .and(entries::entry_type.eq(entry_type)), ) + .order(entries::timestamp.desc()) .get_results::(conn)?; Ok(r) } -- cgit v1.2.3