use anyhow::Result; use std::path::PathBuf; use crate::config; use crate::services::error::CoreError; use crate::services::item_service::ItemService; use clap::error::ErrorKind; use clap::Command; use log::warn; use rusqlite::Connection; pub fn mode_delete( _cmd: &mut Command, _settings: &config::Settings, _config: &config::Settings, ids: &mut Vec, _tags: &mut Vec, conn: &mut Connection, data_path: PathBuf, ) -> Result<()> { // Validation is now handled at the argument parsing level // So we can assume ids is not empty and tags is empty let item_service = ItemService::new(data_path); for item_id in ids.iter() { match item_service.delete_item(conn, *item_id) { Ok(_) => {} Err(e) => match e { CoreError::ItemNotFound(_) => { warn!("Unable to find item {item_id} in database"); } _ => return Err(anyhow::Error::from(e).context(format!("Failed to delete item {}", item_id))), }, } } Ok(()) }