diff options
| author | Nathan Perry <avaglir@gmail.com> | 2018-06-01 05:42:40 -0400 |
|---|---|---|
| committer | Nathan Perry <avaglir@gmail.com> | 2018-06-01 05:42:40 -0400 |
| commit | 413384896f66aeb2737f5f60433c2467d867fb36 (patch) | |
| tree | 9fc8482e9d61d8d1038d791f46ef055d7cd7c0f7 /src/db | |
| parent | a52eae2964e8e86bf3e587f17d607025f07efdbb (diff) | |
various command improvements
- support last_meme (report details about last meme played back)
- update filter priority for meme search (check title match first)
Diffstat (limited to 'src/db')
| -rw-r--r-- | src/db/mod.rs | 19 | ||||
| -rw-r--r-- | src/db/models.rs | 10 |
2 files changed, 25 insertions, 4 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs index 0bf2f1d..d1d7c9b 100644 --- a/src/db/mod.rs +++ b/src/db/mod.rs @@ -3,6 +3,7 @@ use std::convert::AsRef; use diesel::prelude::*;
use diesel::r2d2::{ConnectionManager, ManageConnection};
+use diesel::NotFound;
use super::{Result, Error};
pub use self::models::*;
@@ -25,13 +26,23 @@ pub fn find_meme<T: AsRef<str>>(conn: &PgConnection, search: T) -> Result<Meme> use diesel::sql_types::Text;
let search = search.as_ref();
- let format_search = format!("%{}%", search);
// TODO: check for injection
- memes::table
- .filter(memes::title.ilike(&format_search).or(sql("content ILIKE ").bind::<Text, _>(&format_search)))
+ let mut meme = memes::table
+ .filter(memes::title.eq(search))
.limit(1)
- .first::<Meme>(conn)
+ .first::<Meme>(conn);
+
+ if let Err(NotFound) = meme {
+ let format_search = format!("%{}%", search);
+
+ meme = memes::table
+ .filter(memes::title.ilike(&format_search).or(sql("content ILIKE ").bind::<Text, _>(&format_search)))
+ .limit(1)
+ .first::<Meme>(conn);
+ }
+
+ meme
.map_err(Error::from)
}
diff --git a/src/db/models.rs b/src/db/models.rs index d25b593..0708e7c 100644 --- a/src/db/models.rs +++ b/src/db/models.rs @@ -23,6 +23,10 @@ impl Meme { pub fn audio(&self, conn: &PgConnection) -> Option<Result<Audio>> {
self.audio_id.map(|x: i32| audio::table.filter(audio::id.eq(x)).first(conn).map_err(Error::from))
}
+
+ pub fn find(conn: &PgConnection, id: i32) -> Result<Meme> {
+ memes::table.find(id).get_result(conn).map_err(Error::from)
+ }
}
#[derive(Insertable, PartialEq, Debug)]
@@ -167,6 +171,12 @@ impl Metadata { .get_result::<Metadata>(conn)
.map_err(Error::from)
}
+
+ pub fn find(conn: &PgConnection, id: i32) -> Result<Metadata> {
+ metadata::table.find(id)
+ .get_result::<Metadata>(conn)
+ .map_err(Error::from)
+ }
}
#[derive(Insertable, PartialEq, Debug)]
|
