From b8c43d6a4af0be4ef557de6ad514fd1d07a7a8e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= Date: Sun, 8 Sep 2024 08:21:48 +0200 Subject: [PATCH] feat: create a server function for deleting a project --- src/errors/error.rs | 6 ++++++ src/server/projects.rs | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/src/errors/error.rs b/src/errors/error.rs index 993dd7e..21e1214 100644 --- a/src/errors/error.rs +++ b/src/errors/error.rs @@ -7,6 +7,12 @@ pub enum Error { ServerInternal, } +impl From for Error { + fn from(_: diesel::result::Error) -> Self { + Self::ServerInternal + } +} + // has to be implemented for Dioxus server functions impl Display for Error { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { diff --git a/src/server/projects.rs b/src/server/projects.rs index 94ac3f9..0519dcd 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -71,3 +71,17 @@ pub(crate) async fn edit_project(project_id: i32, new_project: NewProject) Ok(updated_project) } + +#[server] +pub(crate) async fn delete_project(project_id: i32) + -> Result<(), ServerFnError>> { + use crate::schema::projects::dsl::*; + + let mut connection = establish_database_connection() + .map_err::, _>(|_| vec![Error::ServerInternal].into())?; + + diesel::delete(projects.filter(id.eq(project_id))).execute(&mut connection) + .map_err::, _>(|error| vec![error.into()].into())?; + + Ok(()) +}