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

            
5
1429
pub(super) async fn run_create_account(
6
1429
    user_id: Uuid,
7
1429
    name_arg: Option<String>,
8
1429
    parent_arg: Option<String>,
9
1429
) -> wasmtime::Result<String> {
10
1429
    let name = name_arg
11
1429
        .filter(|s| !s.is_empty())
12
1429
        .ok_or_else(|| wasmtime::Error::msg("create-account: missing or empty :name arg"))?;
13
1426
    let mut cmd = CreateAccount::new().name(name).user_id(user_id);
14
1426
    if let Some(p) = parent_arg.filter(|s| !s.is_empty()) {
15
51
        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
50
        cmd = cmd.parent(parent_id);
19
1375
    }
20
1425
    match cmd.run().await {
21
1425
        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
1429
}
31

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