Skip to content

Commit 6b1c3fa

Browse files
authored
Merge pull request #484 from AmbireTech/spender-address-response-change
Changed POST /v5/channel/:id/spender/:addr output to SpenderResponse
2 parents 8db0a60 + fcfa5d2 commit 6b1c3fa

File tree

1 file changed

+41
-7
lines changed

1 file changed

+41
-7
lines changed

sentry/src/routes/channel.rs

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -307,22 +307,47 @@ pub async fn add_spender_leaf<C: Locked + 'static>(
307307
let channel = req
308308
.extensions()
309309
.get::<ChainOf<Channel>>()
310-
.ok_or(ResponseError::NotFound)?
311-
.context;
310+
.ok_or(ResponseError::NotFound)?;
312311

313312
update_accounting(
314313
app.pool.clone(),
315-
channel.id(),
314+
channel.context.id(),
316315
spender,
317316
Side::Spender,
318317
UnifiedNum::from_u64(0),
319318
)
320319
.await?;
321320

322-
// TODO: Replace with SpenderResponse
323-
Ok(success_response(serde_json::to_string(&SuccessResponse {
324-
success: true,
325-
})?))
321+
let latest_spendable =
322+
fetch_spendable(app.pool.clone(), &spender, &channel.context.id()).await?;
323+
324+
let latest_spendable = match latest_spendable {
325+
Some(spendable) => spendable,
326+
None => {
327+
create_or_update_spendable_document(&app.adapter, app.pool.clone(), &channel, spender)
328+
.await?
329+
}
330+
};
331+
332+
let new_state =
333+
match get_corresponding_new_state(&app.pool, &app.logger, &channel.context).await? {
334+
Some(new_state) => new_state,
335+
None => return spender_response_without_leaf(latest_spendable.deposit.total),
336+
};
337+
338+
let total_spent = new_state
339+
.balances
340+
.spenders
341+
.get(&spender)
342+
.map(|spent| spent.to_owned());
343+
344+
let res = SpenderResponse {
345+
spender: Spender {
346+
total_deposited: latest_spendable.deposit.total,
347+
total_spent,
348+
},
349+
};
350+
Ok(success_response(serde_json::to_string(&res)?))
326351
}
327352

328353
async fn get_corresponding_new_state(
@@ -902,12 +927,21 @@ mod test {
902927
#[tokio::test]
903928
async fn adds_and_retrieves_spender_leaf() {
904929
let app = setup_dummy_app().await;
930+
905931
let channel_context = app
906932
.config
907933
.find_chain_of(DUMMY_CAMPAIGN.channel.token)
908934
.expect("Dummy channel Token should be present in config!")
909935
.with(DUMMY_CAMPAIGN.channel);
910936

937+
let deposit = AdapterDeposit {
938+
total: BigNum::from_str("100000000000000000000").expect("should convert"), // 100 DAI
939+
still_on_create2: BigNum::from_str("1000000000000000000").expect("should convert"), // 1 DAI
940+
};
941+
app.adapter
942+
.client
943+
.add_deposit_call(channel_context.context.id(), *CREATOR, deposit.clone());
944+
911945
insert_channel(&app.pool, channel_context.context)
912946
.await
913947
.expect("should insert channel");

0 commit comments

Comments
 (0)