diff --git a/src/server/mod.rs b/src/server/mod.rs index 56bd601..86a456c 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -1,2 +1,3 @@ mod database_connection; pub(crate) mod projects; +pub(crate) mod tasks; diff --git a/src/server/tasks.rs b/src/server/tasks.rs new file mode 100644 index 0000000..4784104 --- /dev/null +++ b/src/server/tasks.rs @@ -0,0 +1,30 @@ +use crate::errors::error::Error; +use crate::errors::error_vec::ErrorVec; +use crate::models::task::{NewTask, Task}; +use crate::server::database_connection::establish_database_connection; +use diesel::{RunQueryDsl, SelectableHelper}; +use dioxus::prelude::*; +use validator::Validate; +use crate::errors::task_create_error::TaskCreateError; + +#[server] +pub(crate) async fn create_task(new_task: NewTask) + -> Result>> { + use crate::schema::tasks; + + new_task.validate() + .map_err::, _>(|errors| errors.into())?; + + let mut connection = establish_database_connection() + .map_err::, _>( + |_| vec![TaskCreateError::Error(Error::ServerInternal)].into() + )?; + + let new_task = diesel::insert_into(tasks::table) + .values(&new_task) + .returning(Task::as_returning()) + .get_result(&mut connection) + .unwrap(); + + Ok(new_task) +}