@@ -4,6 +4,7 @@ use crate::{db::Order, lightning::is_valid_invoice};
4
4
use anyhow:: Result ;
5
5
use lnurl:: lightning_address:: LightningAddress ;
6
6
use mostro_core:: message:: { Action , Message , Payload } ;
7
+ use mostro_core:: order:: Status ;
7
8
use nostr_sdk:: prelude:: * ;
8
9
use std:: str:: FromStr ;
9
10
use uuid:: Uuid ;
@@ -16,32 +17,38 @@ pub async fn execute_add_invoice(
16
17
client : & Client ,
17
18
) -> Result < ( ) > {
18
19
let pool = connect ( ) . await ?;
19
- let order = Order :: get_by_id ( & pool, & order_id. to_string ( ) )
20
+ let mut order = Order :: get_by_id ( & pool, & order_id. to_string ( ) )
20
21
. await
21
22
. unwrap ( ) ;
22
- let trade_keys = order. trade_keys . unwrap ( ) ;
23
+ let trade_keys = order. trade_keys . clone ( ) . unwrap ( ) ;
23
24
let trade_keys = Keys :: parse ( trade_keys) . unwrap ( ) ;
24
25
25
26
println ! (
26
27
"Sending a lightning invoice {} to mostro pubId {}" ,
27
28
order_id, mostro_key
28
29
) ;
29
- let mut payload = None ;
30
+ // let mut payload = None;
30
31
// Check invoice string
31
32
let ln_addr = LightningAddress :: from_str ( invoice) ;
32
- if ln_addr. is_ok ( ) {
33
- payload = Some ( Payload :: PaymentRequest ( None , invoice. to_string ( ) , None ) ) ;
33
+ let payload = if ln_addr. is_ok ( ) {
34
+ Some ( Payload :: PaymentRequest ( None , invoice. to_string ( ) , None ) )
34
35
} else {
35
36
match is_valid_invoice ( invoice) {
36
- Ok ( i) => payload = Some ( Payload :: PaymentRequest ( None , i. to_string ( ) , None ) ) ,
37
- Err ( e ) => println ! ( "{}" , e ) ,
37
+ Ok ( i) => Some ( Payload :: PaymentRequest ( None , i. to_string ( ) , None ) ) ,
38
+ Err ( _ ) => None ,
38
39
}
39
- }
40
+ } ;
41
+ let request_id = Uuid :: new_v4 ( ) . as_u128 ( ) as u64 ;
40
42
// Create AddInvoice message
41
- let add_invoice_message =
42
- Message :: new_order ( Some ( * order_id) , None , None , Action :: AddInvoice , payload) ;
43
+ let add_invoice_message = Message :: new_order (
44
+ Some ( * order_id) ,
45
+ Some ( request_id) ,
46
+ None ,
47
+ Action :: AddInvoice ,
48
+ payload,
49
+ ) ;
43
50
44
- send_message_sync (
51
+ let dm = send_message_sync (
45
52
client,
46
53
Some ( identity_keys) ,
47
54
& trade_keys,
@@ -52,5 +59,17 @@ pub async fn execute_add_invoice(
52
59
)
53
60
. await ?;
54
61
62
+ dm. iter ( ) . for_each ( |el| {
63
+ let message = el. 0 . get_inner_message_kind ( ) ;
64
+ if message. request_id == Some ( request_id) && message. action == Action :: WaitingSellerToPay {
65
+ println ! ( "Now we should wait for the seller to pay the invoice" ) ;
66
+ }
67
+ } ) ;
68
+ order
69
+ . set_status ( Status :: WaitingPayment . to_string ( ) )
70
+ . save ( & pool)
71
+ . await
72
+ . unwrap ( ) ;
73
+
55
74
Ok ( ( ) )
56
75
}
0 commit comments