From ee1d099c6acdb38a173a7455804724f3a1b78836 Mon Sep 17 00:00:00 2001 From: Nathan Perry Date: Thu, 5 Apr 2018 22:52:02 -0400 Subject: consolidate memes to one table --- src/db/mod.rs | 52 +++++++++++++++---------------- src/db/models.rs | 94 +++++++++++++++++++++++++++++--------------------------- src/db/schema.rs | 46 +++++++-------------------- 3 files changed, 85 insertions(+), 107 deletions(-) (limited to 'src/db') diff --git a/src/db/mod.rs b/src/db/mod.rs index e1c3a55..258d5a5 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -19,60 +19,58 @@ pub fn connection() -> Result { CONN_MGR.connect().map_err(Error::from) } -pub trait AssociatedData { - type Associated; - - fn associated_data(&self, conn: &PgConnection) -> Result; -} - -pub fn find_text(conn: &PgConnection, search: String) -> Result { +pub fn find_text(conn: &PgConnection, search: String) -> Result { + use diesel::dsl::sql; let format_search = format!("%{}%", search); - text_memes::table - .filter(text_memes::title.ilike(&format_search).or(text_memes::content.ilike(&format_search))) + memes::table + .filter(memes::title.ilike(&format_search).or(sql(&format!("content ILIKE %{}%", search)))) .limit(1) - .first::(conn) + .first::(conn) .map_err(Error::from) } -pub fn find_audio(conn: &PgConnection, search: String) -> Result { +pub fn find_audio(conn: &PgConnection, search: String) -> Result { let format_search = format!("%{}%", search); - audio_memes::table - .filter(audio_memes::title.ilike(format_search)) + memes::table + .filter(memes::title.ilike(format_search).and(memes::audio_id.is_not_null())) .limit(1) - .first::(conn) + .first::(conn) .map_err(Error::from) } -pub fn find_image(conn: &PgConnection, search: String) -> Result { +pub fn find_image(conn: &PgConnection, search: String) -> Result { let format_search = format!("%{}%", search); - image_memes::table - .filter(image_memes::title.ilike(format_search)) + memes::table + .filter(memes::title.ilike(format_search).and(memes::image_id.is_not_null())) .limit(1) - .first::(conn) + .first::(conn) .map_err(Error::from) } -pub fn rand_text(conn: &PgConnection) -> Result { - text_memes::table +pub fn rand_text(conn: &PgConnection) -> Result { + memes::table + .filter(memes::content.is_not_null()) .order(random.desc()) - .first::(conn) + .first::(conn) .map_err(Error::from) } -pub fn rand_image(conn: &PgConnection) -> Result { - image_memes::table +pub fn rand_image(conn: &PgConnection) -> Result { + memes::table + .filter(memes::image_id.is_not_null()) .order(random.desc()) - .first::(conn) + .first::(conn) .map_err(Error::from) } -pub fn rand_audio(conn: &PgConnection) -> Result { - audio_memes::table +pub fn rand_audio(conn: &PgConnection) -> Result { + memes::table + .filter(memes::audio_id.is_not_null()) .order(random.desc()) - .first::(conn) + .first::(conn) .map_err(Error::from) } diff --git a/src/db/models.rs b/src/db/models.rs index c07a12a..7479fff 100644 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -2,85 +2,73 @@ use chrono::naive::NaiveDateTime; use diesel::prelude::*; use super::schema::*; -use super::AssociatedData; use ::{Result, Error}; -#[derive(Insertable, Queryable, Identifiable, PartialEq, AsChangeset, Debug)] -#[table_name="text_memes"] -pub struct TextMeme { +#[derive(Queryable, Identifiable, PartialEq, Debug)] +#[table_name="memes"] +pub struct Meme { pub id: i32, pub title: String, - pub content: String, + pub content: Option, pub image_id: Option, pub audio_id: Option, pub metadata_id: i32, } -impl AssociatedData for TextMeme { - type Associated = (Option, Option