@smbcloud / cli / commits / 9256806

cleanup cli subcommand

Seto Elkahfi committed May 31, 2025 at 16:32 UTC 92568069b8c520ccfc017a226f499b27d73bdd01
2 files changed +44 -44
crates/cli/src/project/crud_read.rs
+41 -1
@@ -1,9 +1,12 @@
1 +use std::{fs::OpenOptions, io::Write};
2 +
3 use crate::{
4 cli::CommandResult,
5 ui::{fail_message, fail_symbol, succeed_message, succeed_symbol},
6 };
7 use anyhow::{anyhow, Result};
6 -use smbcloud_model::project::Project;
8 +use log::debug;
9 +use smbcloud_model::project::{Config, Project};
10 use smbcloud_networking::{environment::Environment, get_smb_token};
11 use smbcloud_networking_project::{crud_project_deployment_read::get_project, get_all};
12 use spinners::Spinner;
@@ -105,3 +108,40 @@ pub(crate) fn show_projects(projects: Vec<Project>) {
108 let table = Table::new(rows);
109 println!("{table}");
110 }
111 +
112 +pub(crate) async fn process_project_use(env: Environment, id: String) -> Result<CommandResult> {
113 + let access_token = get_smb_token(env).await?;
114 + let project = get_project(env, access_token, id).await?;
115 +
116 + let config = Config {
117 + current_project: Some(project),
118 + current_auth_app: None,
119 + };
120 +
121 + let spinner = Spinner::new(
122 + spinners::Spinners::SimpleDotsScrolling,
123 + succeed_message("Loading"),
124 + );
125 + match home::home_dir() {
126 + Some(path) => {
127 + debug!("{}", path.to_str().unwrap());
128 + let mut file = OpenOptions::new()
129 + .create(true)
130 + .truncate(true)
131 + .write(true)
132 + .open([path.to_str().unwrap(), "/.smb/config.json"].join(""))?;
133 + let json = serde_json::to_string(&config)?;
134 + file.write_all(json.as_bytes())?;
135 +
136 + Ok(CommandResult {
137 + spinner,
138 + symbol: succeed_symbol(),
139 + msg: succeed_message("Use project successful."),
140 + })
141 + }
142 + None => {
143 + let error = anyhow!("Failed to get home directory.");
144 + Err(error)
145 + }
146 + }
147 +}
crates/cli/src/project/mod.rs
+3 -43
@@ -10,18 +10,12 @@ use crate::{
10 project::{
11 crud_create::process_project_init,
12 crud_delete::process_project_delete,
13 - crud_read::{process_project_list, process_project_show},
13 + crud_read::{process_project_list, process_project_show, process_project_use},
14 deployment::process_deployment,
15 },
16 - ui::{succeed_message, succeed_symbol},
16 };
18 -use anyhow::{anyhow, Result};
19 -use log::debug;
20 -use smbcloud_model::project::Config;
17 +use anyhow::Result;
18 use smbcloud_networking::environment::Environment;
22 -use smbcloud_networking_project::crud_project_deployment_read::get_project;
23 -use spinners::Spinner;
24 -use std::{fs::OpenOptions, io::Write};
19
20 pub async fn process_project(env: Environment, commands: Commands) -> Result<CommandResult> {
21 match commands {
@@ -29,41 +23,7 @@ pub async fn process_project(env: Environment, commands: Commands) -> Result<Com
23 Commands::List {} => process_project_list(env).await,
24 Commands::Show { id } => process_project_show(env, id).await,
25 Commands::Delete { id } => process_project_delete(env, id).await,
32 - Commands::Use { id } => {
33 - let project = get_project(env,"access token".to_owned(), id).await?;
34 -
35 - let config = Config {
36 - current_project: Some(project),
37 - current_auth_app: None,
38 - };
39 -
40 - let spinner = Spinner::new(
41 - spinners::Spinners::SimpleDotsScrolling,
42 - succeed_message("Loading"),
43 - );
44 - match home::home_dir() {
45 - Some(path) => {
46 - debug!("{}", path.to_str().unwrap());
47 - let mut file = OpenOptions::new()
48 - .create(true)
49 - .truncate(true)
50 - .write(true)
51 - .open([path.to_str().unwrap(), "/.smb/config.json"].join(""))?;
52 - let json = serde_json::to_string(&config)?;
53 - file.write_all(json.as_bytes())?;
54 -
55 - Ok(CommandResult {
56 - spinner,
57 - symbol: succeed_symbol(),
58 - msg: succeed_message("Use project successful."),
59 - })
60 - }
61 - None => {
62 - let error = anyhow!("Failed to get home directory.");
63 - Err(error)
64 - }
65 - }
66 - }
26 + Commands::Use { id } => { process_project_use(env, id).await }
27 Commands::Deployment { id } => process_deployment(env, id).await,
28 }
29 }