diff --git a/src/errors/error_vec.rs b/src/errors/error_vec.rs index 557b338..a7f55ec 100644 --- a/src/errors/error_vec.rs +++ b/src/errors/error_vec.rs @@ -37,7 +37,7 @@ impl Display for ErrorVec { impl FromStr for ErrorVec { type Err = (); - fn from_str(s: &str) -> Result { + fn from_str(_: &str) -> Result { Ok(ErrorVec { errors: Vec::new() }) } } diff --git a/src/errors/project_create_error.rs b/src/errors/project_create_error.rs index d8fad8d..6528528 100644 --- a/src/errors/project_create_error.rs +++ b/src/errors/project_create_error.rs @@ -22,12 +22,12 @@ impl From for ErrorVec { .map(|validation_error| validation_error.code.as_ref()) .map(|code| match code { "title_length" => ProjectCreateError::TitleLengthInvalid, - _ => panic!("unexpected validation error code: {code}"), + _ => panic!("Unexpected validation error code: `{code}`."), }) .collect::>(), - _ => panic!("unexpected validation error kind"), + _ => panic!("Unexpected validation error kind."), }, - _ => panic!("unexpected validation field name: {field}"), + _ => panic!("Unexpected validation field name: `{field}`."), }) .collect::>() .into() diff --git a/src/server/projects.rs b/src/server/projects.rs index 6d459d2..85f7b66 100644 --- a/src/server/projects.rs +++ b/src/server/projects.rs @@ -3,23 +3,21 @@ use crate::errors::error_vec::ErrorVec; use crate::errors::project_create_error::ProjectCreateError; use crate::models::project::{NewProject, Project}; use crate::server::database_connection::establish_database_connection; -use diesel::{RunQueryDsl, SelectableHelper}; +use diesel::{QueryDsl, RunQueryDsl, SelectableHelper}; use dioxus::prelude::*; use validator::Validate; #[server] -pub(crate) async fn create_project( - new_project: NewProject, -) -> Result>> { +pub(crate) async fn create_project(new_project: NewProject) + -> Result>> { use crate::schema::projects; - new_project - .validate() + new_project.validate() .map_err::, _>(|errors| errors.into())?; let mut connection = establish_database_connection() .map_err::, _>( - |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into() + |_| vec![ProjectCreateError::Error(Error::ServerInternal)].into() )?; let new_project = diesel::insert_into(projects::table) @@ -27,8 +25,22 @@ pub(crate) async fn create_project( .returning(Project::as_returning()) .get_result(&mut connection) .map_err::, _>( - |_| vec![ProjectCreateError::Error(Error::ServerInternal), ].into() + |_| vec![ProjectCreateError::Error(Error::ServerInternal)].into() )?; Ok(new_project) } + +#[server] +pub(crate) async fn get_projects() + -> Result, ServerFnError> { + use crate::schema::projects::dsl::*; + + let mut connection = establish_database_connection()?; + + let results = projects + .select(Project::as_select()) + .load::(&mut connection)?; + + Ok(results) +}