11use crate :: {
22 customer, district, find_district, find_warehouse, history,
3- remote:: { call_remote_reducer , remote_warehouse_home } ,
3+ remote:: { remote_warehouse_home , simulate_remote_call } ,
44 resolve_customer, warehouse, Customer , CustomerSelector , District , History , Warehouse , MAX_C_DATA_LEN ,
55} ;
66use spacetimedb:: {
@@ -128,12 +128,19 @@ fn call_remote_resolve_and_update_customer_for_payment(
128128 remote_database_identity : Identity ,
129129 request : & PaymentRequest ,
130130) -> Result < Customer , String > {
131- call_remote_reducer (
131+ // call_remote_reducer(
132+ // ctx,
133+ // remote_database_identity,
134+ // "resolve_and_update_customer_for_payment",
135+ // request,
136+ // )
137+ simulate_remote_call (
132138 ctx,
133139 remote_database_identity,
134140 "resolve_and_update_customer_for_payment" ,
135141 request,
136- )
142+ ) ?;
143+ Ok ( simulated_remote_customer ( request) )
137144}
138145
139146#[ procedure]
@@ -149,6 +156,53 @@ fn process_remote_payment(ctx: &mut ProcedureContext, request: PaymentRequest) -
149156 } )
150157}
151158
159+ fn simulated_remote_customer ( request : & PaymentRequest ) -> Customer {
160+ let ( customer_id, customer_first, customer_last) = match & request. customer_selector {
161+ CustomerSelector :: ById ( customer_id) => (
162+ * customer_id,
163+ format ! ( "Remote{customer_id}" ) ,
164+ format ! ( "Customer{customer_id}" ) ,
165+ ) ,
166+ CustomerSelector :: ByLastName ( last_name) => (
167+ simulated_customer_id_from_last_name ( last_name) ,
168+ "Remote" . to_string ( ) ,
169+ last_name. clone ( ) ,
170+ ) ,
171+ } ;
172+
173+ Customer {
174+ customer_key : 0 ,
175+ c_w_id : request. customer_warehouse_id ,
176+ c_d_id : request. customer_district_id ,
177+ c_id : customer_id,
178+ c_first : customer_first,
179+ c_middle : "OE" . to_string ( ) ,
180+ c_last : customer_last,
181+ c_street_1 : "REMOTE" . to_string ( ) ,
182+ c_street_2 : "SIMULATED" . to_string ( ) ,
183+ c_city : "REMOTE" . to_string ( ) ,
184+ c_state : "RM" . to_string ( ) ,
185+ c_zip : "000000000" . to_string ( ) ,
186+ c_phone : "0000000000000000" . to_string ( ) ,
187+ c_since : request. now ,
188+ c_credit : "GC" . to_string ( ) ,
189+ c_credit_lim_cents : 5_000_000 ,
190+ c_discount_bps : 0 ,
191+ c_balance_cents : -request. payment_amount_cents ,
192+ c_ytd_payment_cents : request. payment_amount_cents ,
193+ c_payment_cnt : 1 ,
194+ c_delivery_cnt : 0 ,
195+ c_data : "SIMULATED_REMOTE_PAYMENT" . to_string ( ) ,
196+ }
197+ }
198+
199+ fn simulated_customer_id_from_last_name ( last_name : & str ) -> u32 {
200+ let hash = last_name. bytes ( ) . fold ( 0_u32 , |acc, byte| {
201+ acc. wrapping_mul ( 31 ) . wrapping_add ( u32:: from ( byte) )
202+ } ) ;
203+ ( hash % crate :: CUSTOMERS_PER_DISTRICT ) + 1
204+ }
205+
152206fn update_customer ( tx : & ReducerContext , request : & PaymentRequest , customer : Customer ) -> Customer {
153207 let mut updated_customer = Customer {
154208 c_balance_cents : customer. c_balance_cents - request. payment_amount_cents ,
0 commit comments