diff options
Diffstat (limited to 'server/src/db/category.rs')
-rw-r--r-- | server/src/db/category.rs | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/server/src/db/category.rs b/server/src/db/category.rs new file mode 100644 index 00000000..99f906d4 --- /dev/null +++ b/server/src/db/category.rs @@ -0,0 +1,63 @@ +use schema::{category}; +use schema::category::dsl::*; +use super::*; + +#[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 super::*; + #[test] + fn test_crud() { + let conn = establish_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]); + } +} |