2 files changed
+38
-13
src/projects/crud/mod.rs
+22
@@ -90,6 +90,28 @@ pub async fn get_project(id: String) -> Result<Project> {
90
}
91
}
92
93
+pub async fn delete_project(id: String) -> Result<()> {
94
+ // Get current token
95
+ let token = get_token().await.unwrap();
96
+
97
+ let response = Client::new()
98
+ .delete([BASE_URL, "v1/projects/", &id].join(""))
99
+ .header("Authorization", token)
100
+ .send()
101
+ .await?;
102
+
103
+ match response.status() {
104
+ reqwest::StatusCode::OK => {
105
+ debug!("Project deleted.");
106
+ Ok(())
107
+ }
108
+ _ => {
109
+ debug!("Failed to request a project.", response.status());
110
+ Err(anyhow!("Failed to delete a project."))
111
+ }
112
+ }
113
+}
114
+
115
async fn get_token() -> Result<String> {
116
if let Some(mut path) = dirs::home_dir() {
117
path.push(".smb/token");
src/projects/mod.rs
+16
-13
@@ -1,9 +1,6 @@
1
mod crud;
2
3
-use std::{
4
- fs::{create_dir_all, File, OpenOptions},
5
- io::Write,
6
-};
3
+use std::{fs::OpenOptions, io::Write};
4
5
use anyhow::{anyhow, Result};
6
use clap::Subcommand;
@@ -13,7 +10,7 @@ use spinners::Spinner;
10
11
use crate::{debug, util::CommandResult};
12
16
-use self::crud::{create_project, get_all, get_project, Config, ProjectCreate};
13
+use self::crud::{create_project, delete_project, get_all, get_project, Config, ProjectCreate};
14
15
#[derive(Subcommand)]
16
pub enum Commands {
@@ -34,7 +31,7 @@ pub enum Commands {
31
Delete {
32
/// Project name
33
#[clap(short, long, required = true)]
37
- name: String,
34
+ id: String,
35
},
36
37
#[clap(about = "Use project for current CLI session.")]
@@ -140,16 +137,22 @@ pub async fn process(commands: Commands) -> Result<CommandResult> {
137
}
138
}
139
}
143
- Commands::Delete { name } => {
140
+ Commands::Delete { id } => {
141
let spinner = Spinner::new(
142
spinners::Spinners::SimpleDotsScrolling,
146
- style("Loading...").green().bold().to_string(),
143
+ style("Deleting project...").green().bold().to_string(),
144
);
148
- Ok(CommandResult {
149
- spinner,
150
- symbol: "✅".to_owned(),
151
- msg: format!("Deleting project {name}."),
152
- })
145
+ match delete_project(id).await {
146
+ Ok(_) => Ok(CommandResult {
147
+ spinner,
148
+ symbol: "✅".to_owned(),
149
+ msg: format!("Project deleted."),
150
+ }),
151
+ Err(e) => {
152
+ let error = anyhow!("Failed to delete project. {e}");
153
+ return Err(error);
154
+ }
155
+ }
156
}
157
Commands::Use { id } => {
158
let project = get_project(id).await?;