task-track 0.6.1

A JJ workspace-based task and TODO management CLI tool
Documentation
use crate::cli::handlers::CommandCtx;
use crate::cli::AliasCommands;
use crate::services::TaskService;
use crate::utils::{Result, TrackError};

pub fn handle_alias(ctx: &CommandCtx, command: AliasCommands) -> Result<()> {
    let task_service = TaskService::new(ctx.db);

    match command {
        AliasCommands::Set { alias, task, force } => {
            let task_id = match task {
                Some(id) => id,
                None => ctx
                    .db
                    .get_current_task_id()?
                    .ok_or(TrackError::NoActiveTask)?,
            };

            task_service.set_alias(task_id, &alias, force)?;
            let task = task_service.get_task(task_id)?;
            println!("Set alias '{}' for task #{}: {}", alias, task.id, task.name);
        }
        AliasCommands::Remove { task } => {
            let task_id = match task {
                Some(id) => id,
                None => ctx
                    .db
                    .get_current_task_id()?
                    .ok_or(TrackError::NoActiveTask)?,
            };

            let task = task_service.get_task(task_id)?;
            if task.alias.is_none() {
                println!("Task #{} has no alias", task_id);
                return Ok(());
            }

            let removed_alias = task.alias.clone().unwrap();
            task_service.remove_alias(task_id)?;
            println!(
                "Removed alias '{}' from task #{}: {}",
                removed_alias, task.id, task.name
            );
        }
    }

    Ok(())
}