1
use server::command::account::{CreateAccount, SetAccountTag};
2
use server::command::{CmdResult, FinanceEntity};
3
use uuid::Uuid;
4

            
5
1486
pub(super) async fn run_create_account(
6
1486
    user_id: Uuid,
7
1486
    name_arg: Option<String>,
8
1486
    parent_arg: Option<String>,
9
1486
) -> wasmtime::Result<String> {
10
1486
    let name = name_arg
11
1486
        .filter(|s| !s.is_empty())
12
1486
        .ok_or_else(|| wasmtime::Error::msg("create-account: missing or empty :name arg"))?;
13
1483
    let mut cmd = CreateAccount::new().name(name).user_id(user_id);
14
1483
    if let Some(p) = parent_arg.filter(|s| !s.is_empty()) {
15
53
        let parent_id = Uuid::parse_str(&p).map_err(|err| {
16
1
            wasmtime::Error::msg(format!("create-account: invalid parent uuid '{p}': {err}"))
17
1
        })?;
18
52
        cmd = cmd.parent(parent_id);
19
1430
    }
20
1482
    match cmd.run().await {
21
1482
        Ok(Some(CmdResult::Entity(FinanceEntity::Account(account)))) => Ok(account.id.to_string()),
22
        Ok(Some(other)) => Err(wasmtime::Error::msg(format!(
23
            "create-account: expected Account entity, got {other:?}"
24
        ))),
25
        Ok(None) => Err(wasmtime::Error::msg(
26
            "create-account: command returned no entity",
27
        )),
28
        Err(err) => Err(wasmtime::Error::msg(format!("create-account: {err}"))),
29
    }
30
1486
}
31

            
32
82
pub(super) async fn run_set_account_tag(
33
82
    user_id: Uuid,
34
82
    id_arg: Option<String>,
35
82
    name_arg: Option<String>,
36
82
    value_arg: Option<String>,
37
82
) -> wasmtime::Result<i32> {
38
82
    let raw = id_arg
39
82
        .filter(|s| !s.is_empty())
40
82
        .ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing or empty :account-id arg"))?;
41
81
    let account_id = Uuid::parse_str(&raw).map_err(|err| {
42
1
        wasmtime::Error::msg(format!("set-account-tag: invalid uuid '{raw}': {err}"))
43
1
    })?;
44
80
    let tag_name = name_arg
45
80
        .filter(|s| !s.is_empty())
46
80
        .ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing or empty :tag-name arg"))?;
47
78
    let tag_value =
48
79
        value_arg.ok_or_else(|| wasmtime::Error::msg("set-account-tag: missing :tag-value arg"))?;
49
78
    SetAccountTag::new()
50
78
        .user_id(user_id)
51
78
        .account_id(account_id)
52
78
        .tag_name(tag_name)
53
78
        .tag_value(tag_value)
54
78
        .run()
55
78
        .await
56
78
        .map(|_| 1)
57
78
        .map_err(|err| wasmtime::Error::msg(format!("set-account-tag: {err}")))
58
82
}