going somewhere.
This commit is contained in:
1 parent
494cdedfc6
commit
64e9be8b5a
12 files changed
+203
-76
No files matched your search
@@ -1,37 +1,62 @@
|
||||
use rusqlite::{params, Result, Transaction};
|
||||
use rusqlite::{params, Params, Transaction};
|
||||
|
||||
use crate::db::accounts::get_account_by_id;
|
||||
use crate::db::accounts::{Account, get_account_by_id};
|
||||
use crate::db::cheques::SecurityEmitterCheque;
|
||||
use crate::db::external_id::AccountId;
|
||||
use crate::db::securities;
|
||||
use crate::db::securities::get_security_by_id;
|
||||
use crate::util::*;
|
||||
|
||||
fn _add_securities_to_account(tx: &Transaction,
|
||||
cheque: &SecurityEmitterCheque) -> Result<()> {
|
||||
fn _add_securities_to_account(tx: &TransactionHelper,
|
||||
cheque: &SecurityEmitterCheque,
|
||||
account_id: &AccountId) -> CustomResult<()> {
|
||||
let q = "UPDATE accounts
|
||||
SET amount = amount + ?1
|
||||
WHERE id = ?2";
|
||||
tx.execute(q, params![cheque.amount, account_id])?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn _add_cheque_to_cashed_cheques_log(tx: &TransactionHelper,
|
||||
cheque: &SecurityEmitterCheque,
|
||||
account_id: &AccountId) -> Result<(), Error> {
|
||||
let q = "
|
||||
INSERT INTO accounts() VALUES()
|
||||
INSERT INTO cashed_cheques(
|
||||
drawer_user_id,
|
||||
cheque_number,
|
||||
amount,
|
||||
underlying_security
|
||||
)
|
||||
VALUES(?1, ?2, ?3, ?4)
|
||||
";
|
||||
tx.execute(q, params![cheque.amount])?;
|
||||
tx.execute(q, params![cheque.drawer_user_id,
|
||||
cheque.cheque_number,
|
||||
cheque.amount,
|
||||
cheque.security_id])?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn cash_cheque(tx: &Transaction,
|
||||
cheque: &SecurityEmitterCheque) -> Result<()> {
|
||||
cheque.assert_valid(tx)?;
|
||||
cheque: &SecurityEmitterCheque,
|
||||
account_id: &AccountId) -> CustomResult<()> {
|
||||
// move money to new account
|
||||
_add_securities_to_account(tx, cheque)?;
|
||||
// create transaction log
|
||||
// create cheque log
|
||||
Ok(())
|
||||
}
|
||||
if !securities::is_owner(tx, &cheque.security_id, &cheque.drawer_user_id).map_err(Error::SqlError)? {
|
||||
return Err(Error::InvalidDrawer(format!("The drawer is the security owner: {:?}", cheque)));
|
||||
}
|
||||
|
||||
fn update_account(tx: &Transaction, account_id: u32) -> Result<()> {
|
||||
let account = get_account_by_id(tx, account_id)?;
|
||||
return Ok(());
|
||||
|
||||
let myx = TransactionHelper::new(tx);
|
||||
_add_securities_to_account(&myx, cheque, account_id)?;
|
||||
_add_cheque_to_cashed_cheques_log(&myx, cheque, account_id)?;
|
||||
// create transaction log
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use rusqlite::{Connection, params, Result};
|
||||
use rusqlite::{Connection, params};
|
||||
use crate::db::accounts::create_account;
|
||||
|
||||
use crate::db::test_utils;
|
||||
use crate::migration;
|
||||
@@ -44,19 +69,36 @@ mod test {
|
||||
return conn;
|
||||
}
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_basic() -> Result<()> {
|
||||
fn test_basic() -> Result<(), Error> {
|
||||
let mut conn = setup();
|
||||
let tx = conn.transaction()?;
|
||||
let (users, securities, accounts) = test_utils::setup_basic_environment(&tx)?;
|
||||
tx.commit()?;
|
||||
let tx = conn.transaction().unwrap();
|
||||
let (users, securities, accounts) = test_utils::setup_basic_environment(&tx).unwrap();
|
||||
let sec = securities.get(0).unwrap();
|
||||
let drawer = users.get(0).unwrap();
|
||||
let payee = users.get(1).unwrap();
|
||||
let amount: u32 = 1000;
|
||||
let payee_account = create_account(&tx, & sec.id(), & payee.id()).unwrap();
|
||||
|
||||
let tx = conn.transaction()?;
|
||||
// let cheque = SecurityEmitterCheque{
|
||||
// drawer_user_id: users.get_unchecked(0).id
|
||||
// };
|
||||
tx.commit().unwrap();
|
||||
let tx = conn.transaction().unwrap();
|
||||
|
||||
|
||||
// let tx = conn.transaction()?;
|
||||
// SecurityEmitterCheque::new(securities.get())
|
||||
let cheque = SecurityEmitterCheque::new(
|
||||
drawer.id(),
|
||||
sec.id(),
|
||||
payee.id(),
|
||||
amount,
|
||||
99,
|
||||
);
|
||||
|
||||
|
||||
cash_cheque(&tx, &cheque, &payee_account.id())?;
|
||||
|
||||
tx.commit().unwrap();
|
||||
Ok(())
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user