From d410d75ca967d476784eaca22d6e49f21ca318dd Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Thu, 15 Feb 2018 00:03:32 -0500 Subject: start adding in diesel --- src/db/mod.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/db/models.rs | 18 ++++++++++++++++ src/db/schema.rs | 21 +++++++++++++++++++ 3 files changed, 102 insertions(+) create mode 100644 src/db/mod.rs create mode 100644 src/db/models.rs create mode 100644 src/db/schema.rs (limited to 'src/db') diff --git a/src/db/mod.rs b/src/db/mod.rs new file mode 100644 index 0000000..8ce0011 --- /dev/null +++ b/src/db/mod.rs @@ -0,0 +1,63 @@ +use std::env; + +use diesel::prelude::*; + +use super::{Result, Error}; +pub use self::models::*; + +mod schema; +mod models; + +fn connection() -> Result { + let database_url = env::var("DATABASE_URL")?; + PgConnection::establish(&database_url).map_err(Error::from) +} + +pub fn find_text(search: String) -> Result { + use self::schema::text_memes::dsl::*; + + let format_search = format!("%{}%", search); + + let conn = connection()?; + text_memes + .filter(title.ilike(&format_search).or(content.ilike(&format_search))) + .limit(1) + .first::(&conn) + .map_err(Error::from) +} + +pub fn find_audio(search: String) -> Result { + use self::schema::audio_memes::dsl::*; + + let format_search = format!("%{}%", search); + + let conn = connection()?; + audio_memes + .filter(title.ilike(format_search)) + .limit(1) + .first::(&conn) + .map_err(Error::from) +} + +pub fn rand_audio() -> Result { + use self::schema::audio_memes::dsl::*; + + let conn = connection()?; + audio_memes + .order(random.desc()) + .first::(&conn) + .map_err(Error::from) +} + +pub fn rand_text() -> Result { + use self::schema::text_memes::dsl::*; + + let conn = connection()?; + text_memes + .order(random.desc()) + .first::(&conn) + .map_err(Error::from) +} + +use diesel::sql_types; +no_arg_sql_function!(random, sql_types::Double, "SQL random() function"); diff --git a/src/db/models.rs b/src/db/models.rs new file mode 100644 index 0000000..899fa1e --- /dev/null +++ b/src/db/models.rs @@ -0,0 +1,18 @@ +use super::schema::*; + +#[derive(Insertable, Queryable, Identifiable, AsChangeset)] +#[table_name="audio_memes"] +pub struct AudioMeme { + pub id: i32, + pub title: String, + pub link: String, +} + +#[derive(Insertable, Queryable, Identifiable, AsChangeset)] +#[table_name="text_memes"] +pub struct TextMeme { + pub id: i32, + pub title: String, + pub content: String, + pub pic_related: String, +} diff --git a/src/db/schema.rs b/src/db/schema.rs new file mode 100644 index 0000000..b29a1ca --- /dev/null +++ b/src/db/schema.rs @@ -0,0 +1,21 @@ +table! { + audio_memes (id) { + id -> Int4, + title -> Varchar, + link -> Varchar, + } +} + +table! { + text_memes (id) { + id -> Int4, + title -> Varchar, + content -> Text, + pic_related -> Varchar, + } +} + +allow_tables_to_appear_in_same_query!( + audio_memes, + text_memes, +); -- cgit v1.3.1