]> Untitled Git - lemmy.git/blob - crates/db_queries/src/source/category.rs
Move most code into crates/ subfolder
[lemmy.git] / crates / db_queries / src / source / category.rs
1 use crate::Crud;
2 use diesel::{dsl::*, result::Error, *};
3 use lemmy_db_schema::{schema::category::dsl::*, source::category::*};
4
5 impl Crud<CategoryForm> for Category {
6   fn read(conn: &PgConnection, category_id: i32) -> Result<Self, Error> {
7     category.find(category_id).first::<Self>(conn)
8   }
9
10   fn create(conn: &PgConnection, new_category: &CategoryForm) -> Result<Self, Error> {
11     insert_into(category)
12       .values(new_category)
13       .get_result::<Self>(conn)
14   }
15
16   fn update(
17     conn: &PgConnection,
18     category_id: i32,
19     new_category: &CategoryForm,
20   ) -> Result<Self, Error> {
21     diesel::update(category.find(category_id))
22       .set(new_category)
23       .get_result::<Self>(conn)
24   }
25 }
26
27 pub trait Category_ {
28   fn list_all(conn: &PgConnection) -> Result<Vec<Category>, Error>;
29 }
30
31 impl Category_ for Category {
32   fn list_all(conn: &PgConnection) -> Result<Vec<Category>, Error> {
33     category.load::<Self>(conn)
34   }
35 }
36
37 #[cfg(test)]
38 mod tests {
39   use crate::{establish_unpooled_connection, source::category::Category_};
40   use lemmy_db_schema::source::category::Category;
41
42   #[test]
43   fn test_crud() {
44     let conn = establish_unpooled_connection();
45
46     let categories = Category::list_all(&conn).unwrap();
47     let expected_first_category = Category {
48       id: 1,
49       name: "Discussion".into(),
50     };
51
52     assert_eq!(expected_first_category, categories[0]);
53   }
54 }