@smbcloud / cli / commits / 4d5ee42

Delete project

Seto Elkahfi committed Apr 9, 2023 at 22:22 UTC 4d5ee4292a1da7592e02b8a96295e3cf4c7dd7f0
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?;