summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs30
1 files changed, 30 insertions, 0 deletions
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<i64, Error> {
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<Vec<i64>, Error> {
+ use diesel::pg::expression::dsl::any;
+ use crate::schema::raw_data;
+ use std::collections::HashSet;
+
+ let present: HashSet<i64> = 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::<i64>(conn)?
+ .into_iter().collect();
+
+ let ids: HashSet<i64> = 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<usize, Error> {
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::<models::Entry>(conn)?;
Ok(r)
}