]> Untitled Git - lemmy.git/blob - server/src/db/category.rs
Merge remote-tracking branch 'upstream/master'
[lemmy.git] / server / src / db / category.rs
1 use super::*;
2 use crate::schema::category;
3 use crate::schema::category::dsl::*;
4
5 #[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)]
6 #[table_name = "category"]
7 pub struct Category {
8   pub id: i32,
9   pub name: String,
10 }
11
12 #[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)]
13 #[table_name = "category"]
14 pub struct CategoryForm {
15   pub name: String,
16 }
17
18 impl Crud<CategoryForm> for Category {
19   fn read(conn: &PgConnection, category_id: i32) -> Result<Self, Error> {
20     category.find(category_id).first::<Self>(conn)
21   }
22
23   fn delete(conn: &PgConnection, category_id: i32) -> Result<usize, Error> {
24     diesel::delete(category.find(category_id)).execute(conn)
25   }
26
27   fn create(conn: &PgConnection, new_category: &CategoryForm) -> Result<Self, Error> {
28     insert_into(category)
29       .values(new_category)
30       .get_result::<Self>(conn)
31   }
32
33   fn update(
34     conn: &PgConnection,
35     category_id: i32,
36     new_category: &CategoryForm,
37   ) -> Result<Self, Error> {
38     diesel::update(category.find(category_id))
39       .set(new_category)
40       .get_result::<Self>(conn)
41   }
42 }
43
44 impl Category {
45   pub fn list_all(conn: &PgConnection) -> Result<Vec<Self>, Error> {
46     category.load::<Self>(conn)
47   }
48 }
49
50 #[cfg(test)]
51 mod tests {
52   use super::*;
53   #[test]
54   fn test_crud() {
55     let conn = establish_unpooled_connection();
56
57     let categories = Category::list_all(&conn).unwrap();
58     let expected_first_category = Category {
59       id: 1,
60       name: "Discussion".into(),
61     };
62
63     assert_eq!(expected_first_category, categories[0]);
64   }
65 }