feat: create a server function for creating a task

This commit is contained in:
Matouš Volf 2024-08-22 22:12:26 +02:00
parent 4a68c34442
commit d9c79f0a08
2 changed files with 31 additions and 0 deletions

View File

@ -1,2 +1,3 @@
mod database_connection; mod database_connection;
pub(crate) mod projects; pub(crate) mod projects;
pub(crate) mod tasks;

30
src/server/tasks.rs Normal file
View File

@ -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<Task, ServerFnError<ErrorVec<TaskCreateError>>> {
use crate::schema::tasks;
new_task.validate()
.map_err::<ErrorVec<TaskCreateError>, _>(|errors| errors.into())?;
let mut connection = establish_database_connection()
.map_err::<ErrorVec<TaskCreateError>, _>(
|_| 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)
}