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 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 src/db/mod.rs (limited to 'src/db/mod.rs') 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"); -- cgit v1.3.1