@@ -187,6 +187,61 @@ pub async fn close(
187187 }
188188}
189189
190+ pub async fn history (
191+ req : HttpRequest ,
192+ pool : web:: Data < SqlitePool > ,
193+ ) -> HttpResponse {
194+ let merchant = match crate :: api:: auth:: resolve_session ( & req, & pool) . await {
195+ Some ( m) => m,
196+ None => {
197+ return HttpResponse :: Unauthorized ( ) . json ( serde_json:: json!( {
198+ "error" : "Not authenticated"
199+ } ) ) ;
200+ }
201+ } ;
202+
203+ match crate :: sessions:: list_for_merchant ( pool. get_ref ( ) , & merchant. id ) . await {
204+ Ok ( sessions) => {
205+ let items: Vec < _ > = sessions. iter ( ) . map ( |s| {
206+ let balance_used = s. balance_zatoshis - s. balance_remaining ;
207+ let mut obj = serde_json:: json!( {
208+ "id" : s. id,
209+ "deposit_txid" : s. deposit_txid,
210+ "balance_zatoshis" : s. balance_zatoshis,
211+ "balance_remaining" : s. balance_remaining,
212+ "cost_per_request" : s. cost_per_request,
213+ "requests_made" : s. requests_made,
214+ "balance_used" : balance_used,
215+ "status" : s. status,
216+ "expires_at" : s. expires_at,
217+ "created_at" : s. created_at,
218+ "closed_at" : s. closed_at,
219+ } ) ;
220+
221+ if let Some ( ref addr) = s. refund_address {
222+ if s. balance_remaining > 0 && ( s. status == "closed" || s. status == "depleted" || s. status == "expired" ) {
223+ let refund_zec = s. balance_remaining as f64 / 100_000_000.0 ;
224+ obj. as_object_mut ( ) . unwrap ( ) . insert ( "refund" . to_string ( ) , serde_json:: json!( {
225+ "address" : addr,
226+ "amount_zatoshis" : s. balance_remaining,
227+ "amount_zec" : refund_zec,
228+ } ) ) ;
229+ }
230+ }
231+ obj
232+ } ) . collect ( ) ;
233+
234+ HttpResponse :: Ok ( ) . json ( serde_json:: json!( { "sessions" : items } ) )
235+ }
236+ Err ( e) => {
237+ tracing:: error!( error = %e, "Failed to list sessions" ) ;
238+ HttpResponse :: InternalServerError ( ) . json ( serde_json:: json!( {
239+ "error" : "Internal error"
240+ } ) )
241+ }
242+ }
243+ }
244+
190245pub async fn validate (
191246 req : HttpRequest ,
192247 pool : web:: Data < SqlitePool > ,
0 commit comments