From d9c79f0a08577f13972e716efea7d74f71753231 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= Date: Thu, 22 Aug 2024 22:12:26 +0200 Subject: [PATCH] feat: create a server function for creating a task --- src/server/mod.rs | 1 + src/server/tasks.rs | 30 ++++++++++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/server/tasks.rs 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) +}