11use crate :: {
22 interfaces:: contract:: RentACarContractTrait ,
3+ methods:: token:: token:: token_transfer,
34 storage:: {
45 admin:: { read_admin, write_admin} ,
56 car:: { read_car, remove_car, write_car} ,
7+ contract_balance:: { read_contract_balance, write_contract_balance} ,
68 rental:: write_rental,
79 structs:: car:: Car ,
810 structs:: rental:: Rental ,
@@ -31,6 +33,7 @@ impl RentACarContractTrait for RentACarContract {
3133 let car = Car {
3234 price_per_day,
3335 car_status : CarStatus :: Available ,
36+ available_to_withdraw : 0 ,
3437 } ;
3538
3639 write_car ( env, & owner, & car) ;
@@ -43,17 +46,41 @@ impl RentACarContractTrait for RentACarContract {
4346 }
4447
4548 fn rental ( env : & Env , renter : Address , owner : Address , total_days_to_rent : u32 , amount : i128 ) {
49+ renter. require_auth ( ) ;
50+
4651 let mut car = read_car ( env, & owner) ;
4752
4853 car. car_status = CarStatus :: Rented ;
54+ car. available_to_withdraw += amount;
4955
5056 let rental = Rental {
5157 total_days_to_rent,
5258 amount,
5359 } ;
5460
61+ let mut contract_balance = read_contract_balance ( & env) ;
62+ contract_balance += amount;
63+
64+ write_contract_balance ( & env, & contract_balance) ;
5565 write_car ( env, & owner, & car) ;
5666 write_rental ( env, & renter, & owner, & rental) ;
67+
68+ token_transfer ( & env, & renter, & env. current_contract_address ( ) , & amount) ;
69+ }
70+
71+ fn payout_owner ( env : & Env , owner : Address , amount : i128 ) {
72+ owner. require_auth ( ) ;
73+
74+ let mut car = read_car ( & env, & owner) ;
75+ let mut contract_balance = read_contract_balance ( & env) ;
76+
77+ car. available_to_withdraw -= amount;
78+ contract_balance -= amount;
79+
80+ write_car ( & env, & owner, & car) ;
81+ write_contract_balance ( & env, & contract_balance) ;
82+
83+ token_transfer ( & env, & env. current_contract_address ( ) , & owner, & amount) ;
5784 }
5885
5986 fn remove_car ( env : & Env , owner : Address ) {
0 commit comments