vesys-bank-server/http-server/src/handlers/withdraw.rs

32 lines
798 B
Rust

use actix_web::{patch, web, HttpResponse, Responder, Result};
use serde::Serialize;
use bank::bank::Bank;
use crate::handlers::error::HttpAccountError;
use crate::handlers::AmountData;
use crate::AppState;
#[derive(Serialize)]
struct AccountCreated {
nr: String,
}
#[patch("/{nr}/withdraw")]
pub async fn route(
info: web::Path<String>,
form: web::Form<AmountData>,
data: web::Data<AppState>,
) -> Result<impl Responder> {
let nr = info.into_inner();
let amount = form.amount;
info!("withdrawing {} from account {}...", amount, nr);
let bank = data.bank.read().unwrap();
match Bank::account_action(bank, &nr, |account| account.withdraw(amount)) {
Err(e) => Err(HttpAccountError(e).into()),
Ok(_) => Ok(HttpResponse::Ok().finish()),
}
}