mostro_client/cli/
rate_user.rs1use anyhow::Result;
2use mostro_core::prelude::*;
3use nostr_sdk::prelude::*;
4use uuid::Uuid;
5
6use crate::{
7 db::{connect, Order},
8 util::send_message_sync,
9};
10
11pub async fn execute_rate_user(
12 order_id: &Uuid,
13 rating: &u8,
14 identity_keys: &Keys,
15 mostro_key: PublicKey,
16 client: &Client,
17) -> Result<()> {
18 let rating_content;
20
21 if let 1..=5 = *rating {
23 rating_content = Payload::RatingUser(*rating);
24 } else {
25 println!("Rating must be in the range 1 - 5");
26 std::process::exit(0);
27 }
28
29 let pool = connect().await?;
30
31 let trade_keys = if let Ok(order_to_vote) = Order::get_by_id(&pool, &order_id.to_string()).await
32 {
33 match order_to_vote.trade_keys.as_ref() {
34 Some(trade_keys) => Keys::parse(trade_keys)?,
35 None => {
36 anyhow::bail!("No trade_keys found for this order");
37 }
38 }
39 } else {
40 println!("order {} not found", order_id);
41 std::process::exit(0)
42 };
43
44 let rate_message = Message::new_order(
46 Some(*order_id),
47 None,
48 None,
49 Action::RateUser,
50 Some(rating_content),
51 );
52
53 send_message_sync(
54 client,
55 Some(identity_keys),
56 &trade_keys,
57 mostro_key,
58 rate_message,
59 true,
60 false,
61 )
62 .await?;
63
64 std::process::exit(0);
65}