summaryrefslogtreecommitdiff
path: root/src/db.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/db.rs')
-rw-r--r--src/db.rs62
1 files changed, 52 insertions, 10 deletions
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<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)
+// }