1 use anyhow::{anyhow, Result};
2 use log::debug;
3 use reqwest::Client;
4
5 use smbpndk_model::{Project, ProjectCreate};
6 use smbpndk_networking::{constants::BASE_URL, get_token};
7
8 pub async fn get_all() -> Result<Vec<Project>> {
9 // Get current token
10 let token = get_token().await?;
11
12 debug!("Current token: {}", token);
13
14 let response = Client::new()
15 .get([BASE_URL, "v1/projects"].join(""))
16 .header("Authorization", token)
17 .header("User-agent", "smbpndk-cli")
18 .send()
19 .await?;
20
21 match response.status() {
22 reqwest::StatusCode::OK => {
23 let projects: Vec<Project> = response.json().await?;
24 Ok(projects)
25 }
26 _ => Err(anyhow!("Failed to fetch projects.")),
27 }
28 }
29
30 pub async fn create_project(project: ProjectCreate) -> Result<Project> {
31 // Get current token
32 let token = get_token().await?;
33
34 let response = Client::new()
35 .post([BASE_URL, "v1/projects"].join(""))
36 .json(&project)
37 .header("Authorization", token)
38 .send()
39 .await?;
40
41 match response.status() {
42 reqwest::StatusCode::CREATED => {
43 let project: Project = response.json().await?;
44 println!("Project created: {project:#?}");
45 Ok(project)
46 }
47 _ => Err(anyhow!("Failed to create a project.")),
48 }
49 }
50
51 pub async fn get_project(id: String) -> Result<Project> {
52 // Get current token
53 let token = get_token().await.unwrap();
54
55 let response = Client::new()
56 .get([BASE_URL, "v1/projects/", &id].join(""))
57 .header("Authorization", token)
58 .send()
59 .await?;
60
61 match response.status() {
62 reqwest::StatusCode::OK => {
63 let project: Project = response.json().await?;
64 println!("Project requested: {project:#?}");
65 Ok(project)
66 }
67 _ => Err(anyhow!("Failed to request a project.")),
68 }
69 }
70
71 pub async fn delete_project(id: String) -> Result<()> {
72 // Get current token
73 let token = get_token().await.unwrap();
74
75 let response = Client::new()
76 .delete([BASE_URL, "v1/projects/", &id].join(""))
77 .header("Authorization", token)
78 .send()
79 .await?;
80
81 match response.status() {
82 reqwest::StatusCode::OK => {
83 debug!("Project deleted.");
84 Ok(())
85 }
86 _ => Err(anyhow!("Failed to delete a project.")),
87 }
88 }