mostro_client/util/
storage.rs

1use anyhow::Result;
2use mostro_core::prelude::*;
3use nostr_sdk::prelude::*;
4use sqlx::SqlitePool;
5use uuid::Uuid;
6
7use crate::cli::send_msg::execute_send_msg;
8use crate::cli::{Commands, Context};
9use crate::db::{Order, User};
10use crate::util::messaging::get_admin_keys;
11use crate::util::send_dm;
12
13pub async fn save_order(
14    order: SmallOrder,
15    trade_keys: &Keys,
16    request_id: u64,
17    trade_index: i64,
18    pool: &SqlitePool,
19) -> Result<()> {
20    if let Ok(order) = Order::new(pool, order, trade_keys, Some(request_id as i64)).await {
21        if let Some(order_id) = order.id {
22            println!("Order {} created", order_id);
23        } else {
24            println!("Warning: The newly created order has no ID.");
25        }
26
27        match User::get(pool).await {
28            Ok(mut user) => {
29                user.set_last_trade_index(trade_index);
30                if let Err(e) = user.save(pool).await {
31                    println!("Failed to update user: {}", e);
32                }
33            }
34            Err(e) => println!("Failed to get user: {}", e),
35        }
36    }
37    Ok(())
38}
39
40pub async fn run_simple_order_msg(
41    command: Commands,
42    order_id: Option<Uuid>,
43    ctx: &Context,
44) -> Result<()> {
45    execute_send_msg(command, order_id, ctx, None).await
46}
47
48pub async fn admin_send_dm(ctx: &Context, msg: String) -> Result<()> {
49    // Get admin keys
50    let admin_keys = get_admin_keys(ctx)?;
51    // Send DM
52    send_dm(
53        &ctx.client,
54        Some(admin_keys),
55        &ctx.trade_keys,
56        &ctx.mostro_pubkey,
57        msg,
58        None,
59        false,
60    )
61    .await?;
62    Ok(())
63}