track/cli/handlers/
alias.rs1use 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}