feat: create a model for tasks with subtasks

This commit is contained in:
2024-09-08 22:19:53 +02:00
parent e8b6af1492
commit 196ffbf82b
6 changed files with 91 additions and 7 deletions

View File

@ -3,7 +3,7 @@ use crate::errors::error_vec::ErrorVec;
use crate::models::category::Category;
use crate::models::project::Project;
use crate::models::subtask::Subtask;
use crate::models::task::Task;
use crate::models::task::{Task, TaskWithSubtasks};
pub(crate) mod tasks;
pub(crate) mod projects;
@ -13,6 +13,7 @@ pub(crate) mod subtasks;
pub(crate) enum QueryValue {
Projects(Vec<Project>),
Tasks(Vec<Task>),
TasksWithSubtasks(Vec<TaskWithSubtasks>),
Subtasks(Vec<Subtask>),
}
@ -26,5 +27,6 @@ pub(crate) enum QueryKey {
Projects,
Tasks,
TasksInCategory(Category),
TasksWithSubtasksInCategory(Category),
SubtasksOfTaskId(i32),
}

View File

@ -2,7 +2,7 @@ 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;
use crate::server::tasks::{get_tasks_in_category, get_tasks_with_subtasks_in_category};
@ -22,3 +22,29 @@ async fn fetch_tasks_in_category(keys: Vec<QueryKey>) -> QueryResult<QueryValue,
panic!("Unexpected query keys: {:?}", keys);
}
}
pub(crate) fn use_tasks_with_subtasks_in_category_query(category: Category)
-> UseQuery<QueryValue, QueryErrors, QueryKey> {
use_get_query(
[
QueryKey::TasksWithSubtasksInCategory(
category.clone()),
QueryKey::TasksInCategory(category),
QueryKey::Tasks
],
fetch_tasks_with_subtasks_in_category
)
}
async fn fetch_tasks_with_subtasks_in_category(keys: Vec<QueryKey>)
-> QueryResult<QueryValue, QueryErrors> {
if let Some(QueryKey::TasksWithSubtasksInCategory(category)) = keys.first() {
match get_tasks_with_subtasks_in_category(category.clone()).await {
Ok(tasks) => Ok(QueryValue::TasksWithSubtasks(tasks)),
Err(ServerFnError::WrappedServerError(errors)) => Err(QueryErrors::Error(errors)),
Err(error) => panic!("Unexpected error: {:?}", error)
}.into()
} else {
panic!("Unexpected query keys: {:?}", keys);
}
}