Lines
86.54 %
Functions
76.67 %
Branches
100 %
use server::command::account::{CreateAccount, SetAccountTag};
use server::command::{CmdResult, FinanceEntity};
use uuid::Uuid;
pub(super) async fn run_create_account(
user_id: Uuid,
name_arg: Option<String>,
parent_arg: Option<String>,
) -> wasmtime::Result<String> {
let name = name_arg
.filter(|s| !s.is_empty())
.ok_or_else(|| wasmtime::Error::msg("create-account: missing or empty :name arg"))?;
let mut cmd = CreateAccount::new().name(name).user_id(user_id);
if let Some(p) = parent_arg.filter(|s| !s.is_empty()) {
let parent_id = Uuid::parse_str(&p).map_err(|err| {
wasmtime::Error::msg(format!("create-account: invalid parent uuid '{p}': {err}"))
})?;
cmd = cmd.parent(parent_id);
}
match cmd.run().await {
Ok(Some(CmdResult::Entity(FinanceEntity::Account(account)))) => Ok(account.id.to_string()),
Ok(Some(other)) => Err(wasmtime::Error::msg(format!(
"create-account: expected Account entity, got {other:?}"
))),
Ok(None) => Err(wasmtime::Error::msg(
"create-account: command returned no entity",
)),
Err(err) => Err(wasmtime::Error::msg(format!("create-account: {err}"))),
pub(super) async fn run_set_account_tag(
id_arg: Option<String>,
value_arg: Option<String>,
) -> wasmtime::Result<i32> {
let raw = id_arg
.ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing or empty :account-id arg"))?;
let account_id = Uuid::parse_str(&raw).map_err(|err| {
wasmtime::Error::msg(format!("set-account-tag: invalid uuid '{raw}': {err}"))
let tag_name = name_arg
.ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing or empty :tag-name arg"))?;
let tag_value =
value_arg.ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing :tag-value arg"))?;
SetAccountTag::new()
.user_id(user_id)
.account_id(account_id)
.tag_name(tag_name)
.tag_value(tag_value)
.run()
.await
.map(|_| 1)
.map_err(|err| wasmtime::Error::msg(format!("set-account-tag: {err}")))