cellstate/entity/
batch.rs1use anyhow::Result;
6use clap::{Arg, ArgMatches, Command};
7
8use super::client::ApiClient;
9use super::output::OutputConfig;
10
11const BASE: &str = "/api/v1/batch";
12
13pub fn build_command() -> Command {
14 Command::new("batch")
15 .about("Perform batch operations on entities")
16 .subcommand_required(true)
17 .subcommand(
18 Command::new("trajectories")
19 .about("Batch create/update/delete trajectories")
20 .arg(
21 Arg::new("json")
22 .required(true)
23 .help("JSON payload (BatchTrajectoryRequest)"),
24 ),
25 )
26 .subcommand(
27 Command::new("artifacts")
28 .about("Batch create/update/delete artifacts")
29 .arg(
30 Arg::new("json")
31 .required(true)
32 .help("JSON payload (BatchArtifactRequest)"),
33 ),
34 )
35 .subcommand(
36 Command::new("notes")
37 .about("Batch create/update/delete notes")
38 .arg(
39 Arg::new("json")
40 .required(true)
41 .help("JSON payload (BatchNoteRequest)"),
42 ),
43 )
44}
45
46pub async fn dispatch(
47 matches: &ArgMatches,
48 client: &ApiClient,
49 output: &OutputConfig,
50 _session: &crate::session::CliSession,
51) -> Result<()> {
52 match matches.subcommand() {
53 Some(("trajectories", sub)) => {
54 let json_str = sub.get_one::<String>("json").unwrap();
55 let req: serde_json::Value = serde_json::from_str(json_str)?;
56 let resp: serde_json::Value = client
57 .post_raw(&format!("{BASE}/trajectories"), &req)
58 .await?;
59 output.print_value(&resp);
60 }
61 Some(("artifacts", sub)) => {
62 let json_str = sub.get_one::<String>("json").unwrap();
63 let req: serde_json::Value = serde_json::from_str(json_str)?;
64 let resp: serde_json::Value =
65 client.post_raw(&format!("{BASE}/artifacts"), &req).await?;
66 output.print_value(&resp);
67 }
68 Some(("notes", sub)) => {
69 let json_str = sub.get_one::<String>("json").unwrap();
70 let req: serde_json::Value = serde_json::from_str(json_str)?;
71 let resp: serde_json::Value = client.post_raw(&format!("{BASE}/notes"), &req).await?;
72 output.print_value(&resp);
73 }
74 _ => unreachable!("subcommand_required(true) prevents this"),
75 }
76 Ok(())
77}