feat: create a model for tasks with subtasks
This commit is contained in:
		@@ -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),
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user