Skip to main content

track/cli/handlers/
alias.rs

1use crate::cli::handlers::CommandCtx;
2use crate::cli::AliasCommands;
3use crate::services::TaskService;
4use crate::utils::{Result, TrackError};
5
6pub fn handle_alias(ctx: &CommandCtx, command: AliasCommands) -> Result<()> {
7    let task_service = TaskService::new(ctx.db);
8
9    match command {
10        AliasCommands::Set { alias, task, force } => {
11            let task_id = match task {
12                Some(id) => id,
13                None => ctx
14                    .db
15                    .get_current_task_id()?
16                    .ok_or(TrackError::NoActiveTask)?,
17            };
18
19            task_service.set_alias(task_id, &alias, force)?;
20            let task = task_service.get_task(task_id)?;
21            println!("Set alias '{}' for task #{}: {}", alias, task.id, task.name);
22        }
23        AliasCommands::Remove { task } => {
24            let task_id = match task {
25                Some(id) => id,
26                None => ctx
27                    .db
28                    .get_current_task_id()?
29                    .ok_or(TrackError::NoActiveTask)?,
30            };
31
32            let task = task_service.get_task(task_id)?;
33            if task.alias.is_none() {
34                println!("Task #{} has no alias", task_id);
35                return Ok(());
36            }
37
38            let removed_alias = task.alias.clone().unwrap();
39            task_service.remove_alias(task_id)?;
40            println!(
41                "Removed alias '{}' from task #{}: {}",
42                removed_alias, task.id, task.name
43            );
44        }
45    }
46
47    Ok(())
48}