feat: add bags CLI commands
This commit is contained in:
parent
ef6f30d6c3
commit
f0cef61513
2 changed files with 115 additions and 0 deletions
101
src/presentation/cli/bags.rs
Normal file
101
src/presentation/cli/bags.rs
Normal file
|
|
@ -0,0 +1,101 @@
|
|||
use anyhow::Result;
|
||||
use clap::Args;
|
||||
use serde_json::json;
|
||||
|
||||
use super::print_json;
|
||||
use crate::domain::ids::{BagId, RoastId};
|
||||
use crate::infrastructure::client::BrewlogClient;
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct AddBagCommand {
|
||||
#[arg(long)]
|
||||
pub roast_id: i64,
|
||||
#[arg(long)]
|
||||
pub roast_date: Option<String>,
|
||||
#[arg(long)]
|
||||
pub amount: f64,
|
||||
}
|
||||
|
||||
pub async fn add_bag(client: &BrewlogClient, command: AddBagCommand) -> Result<()> {
|
||||
let roast_date = command
|
||||
.roast_date
|
||||
.map(|d| chrono::NaiveDate::parse_from_str(&d, "%Y-%m-%d"))
|
||||
.transpose()?;
|
||||
let bag = client
|
||||
.bags()
|
||||
.create(RoastId::new(command.roast_id), roast_date, command.amount)
|
||||
.await?;
|
||||
print_json(&bag)
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct ListBagsCommand {
|
||||
#[arg(long)]
|
||||
pub roast_id: Option<i64>,
|
||||
}
|
||||
|
||||
pub async fn list_bags(client: &BrewlogClient, command: ListBagsCommand) -> Result<()> {
|
||||
let bags = client
|
||||
.bags()
|
||||
.list(command.roast_id.map(RoastId::new))
|
||||
.await?;
|
||||
print_json(&bags)
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct GetBagCommand {
|
||||
#[arg(long)]
|
||||
pub id: i64,
|
||||
}
|
||||
|
||||
pub async fn get_bag(client: &BrewlogClient, command: GetBagCommand) -> Result<()> {
|
||||
let bag = client.bags().get(BagId::new(command.id)).await?;
|
||||
print_json(&bag)
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct UpdateBagCommand {
|
||||
#[arg(long)]
|
||||
pub id: i64,
|
||||
#[arg(long)]
|
||||
pub remaining: Option<f64>,
|
||||
#[arg(long)]
|
||||
pub closed: Option<bool>,
|
||||
#[arg(long)]
|
||||
pub finished_at: Option<String>,
|
||||
}
|
||||
|
||||
pub async fn update_bag(client: &BrewlogClient, command: UpdateBagCommand) -> Result<()> {
|
||||
let finished_at = command
|
||||
.finished_at
|
||||
.map(|d| chrono::NaiveDate::parse_from_str(&d, "%Y-%m-%d"))
|
||||
.transpose()?;
|
||||
|
||||
let bag = client
|
||||
.bags()
|
||||
.update(
|
||||
BagId::new(command.id),
|
||||
command.remaining,
|
||||
command.closed,
|
||||
finished_at,
|
||||
)
|
||||
.await?;
|
||||
print_json(&bag)
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
pub struct DeleteBagCommand {
|
||||
#[arg(long)]
|
||||
pub id: i64,
|
||||
}
|
||||
|
||||
pub async fn delete_bag(client: &BrewlogClient, command: DeleteBagCommand) -> Result<()> {
|
||||
let id = BagId::new(command.id);
|
||||
client.bags().delete(id).await?;
|
||||
let response = json!({
|
||||
"status": "deleted",
|
||||
"resource": "bag",
|
||||
"id": id.into_inner(),
|
||||
});
|
||||
print_json(&response)
|
||||
}
|
||||
|
|
@ -1,9 +1,11 @@
|
|||
pub mod bags;
|
||||
pub mod roasters;
|
||||
pub mod roasts;
|
||||
pub mod tokens;
|
||||
|
||||
use std::net::SocketAddr;
|
||||
|
||||
use bags::{AddBagCommand, DeleteBagCommand, GetBagCommand, ListBagsCommand, UpdateBagCommand};
|
||||
use clap::{Args, Parser, Subcommand};
|
||||
use roasters::{AddRoasterCommand, DeleteRoasterCommand, GetRoasterCommand, UpdateRoasterCommand};
|
||||
use roasts::{AddRoastCommand, DeleteRoastCommand, GetRoastCommand, ListRoastsCommand};
|
||||
|
|
@ -58,6 +60,18 @@ pub enum Commands {
|
|||
GetRoast(GetRoastCommand),
|
||||
#[command(name = "delete-roast")]
|
||||
DeleteRoast(DeleteRoastCommand),
|
||||
|
||||
// Bags
|
||||
#[command(name = "add-bag")]
|
||||
AddBag(AddBagCommand),
|
||||
#[command(name = "list-bags")]
|
||||
ListBags(ListBagsCommand),
|
||||
#[command(name = "get-bag")]
|
||||
GetBag(GetBagCommand),
|
||||
#[command(name = "update-bag")]
|
||||
UpdateBag(UpdateBagCommand),
|
||||
#[command(name = "delete-bag")]
|
||||
DeleteBag(DeleteBagCommand),
|
||||
}
|
||||
|
||||
#[derive(Debug, Args)]
|
||||
|
|
|
|||
Loading…
Reference in a new issue