use clap::Subcommand;
use crate::cli::{Session, entity};
use crate::exit::ExitCode;
#[derive(Debug, Subcommand)]
pub enum GoalCommand {
#[command(long_about = crate::cli::help::md(crate::cli::help::GOAL_LIST))]
List {
#[arg(long, short = 'Q')]
query: Option<String>,
#[arg(long, default_value_t = 1)]
page: u32,
},
#[command(long_about = crate::cli::help::md(crate::cli::help::GOAL_GET))]
Get { id: String },
#[command(long_about = crate::cli::help::md(crate::cli::help::ENTITY_CREATE))]
Create {
#[command(flatten)]
fields: entity::Fields,
},
#[command(long_about = crate::cli::help::md(crate::cli::help::ENTITY_UPDATE))]
Update {
id: String,
#[command(flatten)]
fields: entity::Fields,
},
#[command(long_about = crate::cli::help::md(crate::cli::help::ENTITY_DELETE))]
Delete {
id: String,
},
}
pub async fn run(command: &GoalCommand, session: &Session) -> ExitCode {
match command {
GoalCommand::List { query, page } => {
entity::list("goal", query.as_deref(), *page, session).await
}
GoalCommand::Get { id } => entity::get("goal", id, session).await,
GoalCommand::Create { fields } => entity::create("goal", fields, session).await,
GoalCommand::Update { id, fields } => entity::update("goal", id, fields, session).await,
GoalCommand::Delete { id } => entity::remove("goal", id, session).await,
}
}