diff options
Diffstat (limited to 'server/lemmy_db/src/category.rs')
-rw-r--r-- | server/lemmy_db/src/category.rs | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/server/lemmy_db/src/category.rs b/server/lemmy_db/src/category.rs new file mode 100644 index 00000000..ec2efc7b --- /dev/null +++ b/server/lemmy_db/src/category.rs @@ -0,0 +1,69 @@ +use crate::{ + schema::{category, category::dsl::*}, + Crud, +}; +use diesel::{dsl::*, result::Error, *}; +use serde::{Deserialize, Serialize}; + +#[derive(Queryable, Identifiable, PartialEq, Debug, Serialize, Deserialize)] +#[table_name = "category"] +pub struct Category { + pub id: i32, + pub name: String, +} + +#[derive(Insertable, AsChangeset, Clone, Serialize, Deserialize)] +#[table_name = "category"] +pub struct CategoryForm { + pub name: String, +} + +impl Crud<CategoryForm> for Category { + fn read(conn: &PgConnection, category_id: i32) -> Result<Self, Error> { + category.find(category_id).first::<Self>(conn) + } + + fn delete(conn: &PgConnection, category_id: i32) -> Result<usize, Error> { + diesel::delete(category.find(category_id)).execute(conn) + } + + fn create(conn: &PgConnection, new_category: &CategoryForm) -> Result<Self, Error> { + insert_into(category) + .values(new_category) + .get_result::<Self>(conn) + } + + fn update( + conn: &PgConnection, + category_id: i32, + new_category: &CategoryForm, + ) -> Result<Self, Error> { + diesel::update(category.find(category_id)) + .set(new_category) + .get_result::<Self>(conn) + } +} + +impl Category { + pub fn list_all(conn: &PgConnection) -> Result<Vec<Self>, Error> { + category.load::<Self>(conn) + } +} + +#[cfg(test)] +mod tests { + use crate::{category::Category, tests::establish_unpooled_connection}; + + #[test] + fn test_crud() { + let conn = establish_unpooled_connection(); + + let categories = Category::list_all(&conn).unwrap(); + let expected_first_category = Category { + id: 1, + name: "Discussion".into(), + }; + + assert_eq!(expected_first_category, categories[0]); + } +} |