From 3735bb6fdb05fb24f2c5e46522c2513b079ae3b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= Date: Thu, 22 Aug 2024 23:04:38 +0200 Subject: [PATCH] feat: handle foreign key constraint fail on task creation --- src/server/tasks.rs | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/server/tasks.rs b/src/server/tasks.rs index 4784104..0b7c086 100644 --- a/src/server/tasks.rs +++ b/src/server/tasks.rs @@ -24,7 +24,22 @@ pub(crate) async fn create_task(new_task: NewTask) .values(&new_task) .returning(Task::as_returning()) .get_result(&mut connection) - .unwrap(); + .map_err::, _>(|error| { + let error = match error { + diesel::result::Error::DatabaseError( + diesel::result::DatabaseErrorKind::ForeignKeyViolation, info + ) => { + match info.constraint_name() { + Some("tasks_project_id_fkey") => TaskCreateError::ProjectNotFound, + _ => TaskCreateError::Error(Error::ServerInternal) + } + }, + _ => { + TaskCreateError::Error(Error::ServerInternal) + } + }; + vec![error].into() + })?; Ok(new_task) }