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) }