1 use crate::settings::Settings;
3 use diesel::result::Error;
5 use serde::{Deserialize, Serialize};
11 pub mod community_view;
13 pub mod moderator_views;
14 pub mod password_reset_request;
17 pub mod private_message;
18 pub mod private_message_view;
23 pub mod user_mention_view;
27 fn create(conn: &PgConnection, form: &T) -> Result<Self, Error>
30 fn read(conn: &PgConnection, id: i32) -> Result<Self, Error>
33 fn update(conn: &PgConnection, id: i32, form: &T) -> Result<Self, Error>
36 fn delete(conn: &PgConnection, id: i32) -> Result<usize, Error>
41 pub trait Followable<T> {
42 fn follow(conn: &PgConnection, form: &T) -> Result<Self, Error>
45 fn ignore(conn: &PgConnection, form: &T) -> Result<usize, Error>
50 pub trait Joinable<T> {
51 fn join(conn: &PgConnection, form: &T) -> Result<Self, Error>
54 fn leave(conn: &PgConnection, form: &T) -> Result<usize, Error>
59 pub trait Likeable<T> {
60 fn read(conn: &PgConnection, id: i32) -> Result<Vec<Self>, Error>
63 fn like(conn: &PgConnection, form: &T) -> Result<Self, Error>
66 fn remove(conn: &PgConnection, form: &T) -> Result<usize, Error>
71 pub trait Bannable<T> {
72 fn ban(conn: &PgConnection, form: &T) -> Result<Self, Error>
75 fn unban(conn: &PgConnection, form: &T) -> Result<usize, Error>
80 pub trait Saveable<T> {
81 fn save(conn: &PgConnection, form: &T) -> Result<Self, Error>
84 fn unsave(conn: &PgConnection, form: &T) -> Result<usize, Error>
89 pub trait Readable<T> {
90 fn mark_as_read(conn: &PgConnection, form: &T) -> Result<Self, Error>
93 fn mark_as_unread(conn: &PgConnection, form: &T) -> Result<usize, Error>
98 pub trait MaybeOptional<T> {
99 fn get_optional(self) -> Option<T>;
102 impl<T> MaybeOptional<T> for T {
103 fn get_optional(self) -> Option<T> {
108 impl<T> MaybeOptional<T> for Option<T> {
109 fn get_optional(self) -> Option<T> {
114 pub fn establish_unpooled_connection() -> PgConnection {
115 let db_url = Settings::get().get_database_url();
116 PgConnection::establish(&db_url).unwrap_or_else(|_| panic!("Error connecting to {}", db_url))
119 #[derive(EnumString, ToString, Debug, Serialize, Deserialize)]
130 #[derive(EnumString, ToString, Debug, Serialize, Deserialize)]
131 pub enum ListingType {
137 #[derive(EnumString, ToString, Debug, Serialize, Deserialize)]
138 pub enum SearchType {
147 pub fn fuzzy_search(q: &str) -> String {
148 let replaced = q.replace(" ", "%");
149 format!("%{}%", replaced)
152 pub fn limit_and_offset(page: Option<i64>, limit: Option<i64>) -> (i64, i64) {
153 let page = page.unwrap_or(1);
154 let limit = limit.unwrap_or(10);
155 let offset = limit * (page - 1);
160 use super::fuzzy_search;
162 fn test_fuzzy_search() {
163 let test = "This is a fuzzy search";
164 assert_eq!(fuzzy_search(test), "%This%is%a%fuzzy%search%".to_string());