diff options
author | Harald Eilertsen <haraldei@anduin.net> | 2024-04-25 17:41:52 +0200 |
---|---|---|
committer | Harald Eilertsen <haraldei@anduin.net> | 2024-04-25 17:41:52 +0200 |
commit | 975c0b735be0808883116616d934ee257a24fb08 (patch) | |
tree | d71dd46bb034674978cb204964f1cfa13dd5d5f1 | |
parent | b7ff847c3c44df876fcc21e946ffff1eb781a4d9 (diff) | |
download | faktura-975c0b735be0808883116616d934ee257a24fb08.tar.gz faktura-975c0b735be0808883116616d934ee257a24fb08.tar.bz2 faktura-975c0b735be0808883116616d934ee257a24fb08.zip |
cli: Add command to edit clients.
Not entirely happy with this one. Specially the patch method of the
Connection struct. While the other method take (or return) an object
that can be serialized to json, the patch method takes a string slice
directly, and passing it to the API.
-rw-r--r-- | cli/src/api/client.rs | 6 | ||||
-rw-r--r-- | cli/src/api/connection.rs | 8 | ||||
-rw-r--r-- | cli/src/main.rs | 5 |
3 files changed, 19 insertions, 0 deletions
diff --git a/cli/src/api/client.rs b/cli/src/api/client.rs index c77063b..df0ca96 100644 --- a/cli/src/api/client.rs +++ b/cli/src/api/client.rs @@ -28,6 +28,12 @@ impl Client { Ok(conn.get("clients")?) } + pub fn update(conn: Connection, client_id: u32, data: &str) -> Result<(), Box<dyn Error>> { + let resp = conn.patch(&format!("clients?id=eq.{}", client_id), data)?; + println!("{}", resp); + Ok(()) + } + pub fn save(&self, conn: Connection) -> Result<(), Box<dyn Error>> { // By default the `id` of a newly created client will be 0, // which will cause the API to add the client with id=0. This works once diff --git a/cli/src/api/connection.rs b/cli/src/api/connection.rs index f1d7f1c..5505afb 100644 --- a/cli/src/api/connection.rs +++ b/cli/src/api/connection.rs @@ -33,4 +33,12 @@ impl Connection { .send_json(&data)? .into_string()?) } + + pub fn patch(&self, resource: &str, data: &str) -> Result<String, Box<dyn Error>> { + Ok(ureq::patch(&format!("{}/{}", &self.url, resource)) + .set("Authorization", &format!("Bearer {}", self.jwt_token)) + .set("Content-Type", "application/json") + .send_string(&data)? + .into_string()?) + } } diff --git a/cli/src/main.rs b/cli/src/main.rs index ee10d17..794db9f 100644 --- a/cli/src/main.rs +++ b/cli/src/main.rs @@ -26,6 +26,11 @@ fn main() -> Result<(), Box<dyn std::error::Error>> { add_client(conn, &args.next() .expect("expected new client json data"))?; }, + "--edit-client" => { + let client_id = args.next().expect("missing client id").parse()?; + let json = args.next().expect("missing json data"); + Client::update(conn, client_id, &json)?; + }, &_ => { println!("Unknown command: {}", cmd); } |