(mut config: Config, args: &ArgMatches)
| 32 | } |
| 33 | |
| 34 | pub async fn exec(mut config: Config, args: &ArgMatches) -> Result<(), anyhow::Error> { |
| 35 | let server_from_cli = args.get_one::<String>("server").map(|s| s.as_ref()); |
| 36 | let no_config = args.get_flag("no_config"); |
| 37 | let database_arg = args.get_one::<String>("database").map(|s| s.as_str()); |
| 38 | let config_targets = load_config_db_targets(no_config)?; |
| 39 | let resolved = resolve_database_arg( |
| 40 | database_arg, |
| 41 | config_targets.as_deref(), |
| 42 | "spacetime delete [database] [--no-config]", |
| 43 | )?; |
| 44 | let server = server_from_cli.or(resolved.server.as_deref()); |
| 45 | let force = args.get_flag("force"); |
| 46 | |
| 47 | let identity = database_identity(&config, &resolved.database, server).await?; |
| 48 | let delete_target = if resolved.database == identity.to_string() { |
| 49 | identity.to_string() |
| 50 | } else { |
| 51 | format!("{} ({identity})", resolved.database) |
| 52 | }; |
| 53 | |
| 54 | if !y_or_n( |
| 55 | force, |
| 56 | &format!("Are you sure you want to delete database {delete_target}? This action cannot be undone."), |
| 57 | )? { |
| 58 | println!("Aborting"); |
| 59 | return Ok(()); |
| 60 | } |
| 61 | |
| 62 | let host_url = config.get_host_url(server)?; |
| 63 | let request_path = format!("{host_url}/v1/database/{identity}"); |
| 64 | let auth_header = get_auth_header(&mut config, false, server, !force).await?; |
| 65 | let client = reqwest::Client::new(); |
| 66 | |
| 67 | let response = send_request(&client, &request_path, &auth_header, None).await?; |
| 68 | match response.status() { |
| 69 | StatusCode::PRECONDITION_REQUIRED => { |
| 70 | let confirm = response.json::<DatabaseDeleteConfirmationResponse>().await?; |
| 71 | println!("WARNING: Deleting the database {identity} will also delete its children!"); |
| 72 | if !force { |
| 73 | print_database_tree_info(&confirm.database_tree).await?; |
| 74 | } |
| 75 | if force || y_or_n(false, "Do you want to proceed deleting above databases?")? { |
| 76 | send_request(&client, &request_path, &auth_header, Some(confirm.confirmation_token)) |
| 77 | .await? |
| 78 | .error_for_status()?; |
| 79 | } else { |
| 80 | println!("Aborting"); |
| 81 | } |
| 82 | |
| 83 | Ok(()) |
| 84 | } |
| 85 | StatusCode::OK => Ok(()), |
| 86 | _ => response.error_for_status().map(drop).map_err(Into::into), |
| 87 | } |
| 88 | } |
| 89 | |
| 90 | async fn send_request( |
| 91 | client: &reqwest::Client, |
nothing calls this directly
no test coverage detected
searching dependent graphs…