From 250e3745186356a1bf9759658a77d879f6d0c66f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matou=C5=A1=20Volf?= Date: Thu, 5 Sep 2024 17:15:31 +0200 Subject: [PATCH] feat: create a module for Dioxus query --- src/main.rs | 1 + src/query/mod.rs | 22 ++++++++++++++++++++++ src/query/tasks.rs | 24 ++++++++++++++++++++++++ 3 files changed, 47 insertions(+) create mode 100644 src/query/mod.rs create mode 100644 src/query/tasks.rs diff --git a/src/main.rs b/src/main.rs index b7109a5..a7a75b6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,6 +4,7 @@ mod models; mod route; mod schema; mod server; +mod query; use components::app::App; use dioxus::prelude::*; diff --git a/src/query/mod.rs b/src/query/mod.rs new file mode 100644 index 0000000..5bbe59c --- /dev/null +++ b/src/query/mod.rs @@ -0,0 +1,22 @@ +use crate::errors::error::Error; +use crate::errors::error_vec::ErrorVec; +use crate::models::category::Category; +use crate::models::task::Task; + +pub(crate) mod tasks; + +#[derive(PartialEq, Debug)] +pub(crate) enum QueryValue { + Tasks(Vec), +} + +#[derive(Debug)] +pub(crate) enum QueryErrors { + Error(ErrorVec), +} + +#[derive(PartialEq, Eq, Hash, Clone, Debug)] +pub(crate) enum QueryKey { + Tasks, + TasksInCategory(Category), +} diff --git a/src/query/tasks.rs b/src/query/tasks.rs new file mode 100644 index 0000000..b1f5272 --- /dev/null +++ b/src/query/tasks.rs @@ -0,0 +1,24 @@ +use dioxus::prelude::ServerFnError; +use dioxus_query::prelude::{use_get_query, QueryResult, UseQuery}; +use crate::models::category::Category; +use crate::query::{QueryErrors, QueryKey, QueryValue}; +use crate::server::tasks::get_tasks_in_category; + + + +pub(crate) fn use_tasks_in_category_query(category: Category) + -> UseQuery { + use_get_query([QueryKey::TasksInCategory(category), QueryKey::Tasks], fetch_tasks_in_category) +} + +async fn fetch_tasks_in_category(keys: Vec) -> QueryResult { + if let Some(QueryKey::TasksInCategory(category)) = keys.first() { + match get_tasks_in_category(category.clone()).await { + Ok(tasks) => Ok(QueryValue::Tasks(tasks)), + Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)), + Err(error) => panic!("Unexpected error: {:?}", error) + }.into() + } else { + panic!("Unexpected query keys: {:?}", keys); + } +}