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};
10
11pub async fn save_order(
12    order: SmallOrder,
13    trade_keys: &Keys,
14    request_id: u64,
15    trade_index: i64,
16    pool: &SqlitePool,
17) -> Result<()> {
18    let req_id_i64 = i64::try_from(request_id)
19        .map_err(|_| anyhow::anyhow!("request_id too large for i64: {}", request_id))?;
20    let order = Order::new(pool, order, trade_keys, Some(req_id_i64)).await?;
21
22    if let Some(order_id) = order.id {
23        println!("Order {} created", order_id);
24    } else {
25        println!("Warning: The newly created order has no ID.");
26    }
27
28    match User::get(pool).await {
29        Ok(mut user) => {
30            user.set_last_trade_index(trade_index);
31            if let Err(e) = user.save(pool).await {
32                println!("Failed to update user: {}", e);
33            }
34        }
35        Err(e) => println!("Failed to get user: {}", e),
36    }
37
38    Ok(())
39}
40
41pub async fn run_simple_order_msg(
42    command: Commands,
43    order_id: Option<Uuid>,
44    ctx: &Context,
45) -> Result<()> {
46    execute_send_msg(command, order_id, ctx, None).await
47}
48
49pub async fn admin_send_dm(ctx: &Context, msg: String) -> Result<()> {
50    super::messaging::send_dm(
51        &ctx.client,
52        Some(&ctx.context_keys),
53        &ctx.trade_keys,
54        &ctx.mostro_pubkey,
55        msg,
56        None,
57        false,
58    )
59    .await?;
60    Ok(())
61}