From 0e4fcc16019ee3761a9be886075975dbe61d17a2 Mon Sep 17 00:00:00 2001 From: mace Date: Mon, 10 Apr 2023 17:37:59 +0200 Subject: [PATCH] first steps --- src/{config => database}/database.rs | 0 src/{config => database}/mod.rs | 0 src/entity/merchant.rs | 7 ++++ src/entity/mod.rs | 1 + src/main.rs | 48 ++++++---------------------- src/repository/merchant_repo.rs | 16 ++++++++++ src/repository/mod.rs | 1 + 7 files changed, 34 insertions(+), 39 deletions(-) rename src/{config => database}/database.rs (100%) rename src/{config => database}/mod.rs (100%) create mode 100644 src/entity/merchant.rs create mode 100644 src/entity/mod.rs create mode 100644 src/repository/merchant_repo.rs create mode 100644 src/repository/mod.rs diff --git a/src/config/database.rs b/src/database/database.rs similarity index 100% rename from src/config/database.rs rename to src/database/database.rs diff --git a/src/config/mod.rs b/src/database/mod.rs similarity index 100% rename from src/config/mod.rs rename to src/database/mod.rs diff --git a/src/entity/merchant.rs b/src/entity/merchant.rs new file mode 100644 index 0000000..077ee6d --- /dev/null +++ b/src/entity/merchant.rs @@ -0,0 +1,7 @@ + +#[derive(Debug, PartialEq, Eq)] +pub struct Merchant { + pub m_id: usize, + pub m_name: String, +} + diff --git a/src/entity/mod.rs b/src/entity/mod.rs new file mode 100644 index 0000000..cefeec6 --- /dev/null +++ b/src/entity/mod.rs @@ -0,0 +1 @@ +pub mod merchant; diff --git a/src/main.rs b/src/main.rs index 2e14583..7f392d3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,10 @@ -use config::database::Db; -use mysql::{prelude::Queryable, PooledConn, params}; +use database::database::Db; +use mysql::PooledConn; +use repository::merchant_repo; -pub mod config; +pub mod database; +pub mod entity; +pub mod repository; #[derive(Debug, PartialEq, Eq)] struct Payment { @@ -14,43 +17,10 @@ fn main() -> std::result::Result<(), Box> { let db = Db::initialize(); let mut conn: PooledConn = db.get_connection(); - conn.query_drop( - r"CREATE TEMPORARY TABLE payment ( - customer_id int not null, - amount int not null, - account_name text - )")?; - - let payments = vec![ - Payment { customer_id: 1, amount: 2, account_name: None }, - Payment { customer_id: 3, amount: 4, account_name: Some("foo".into()) }, - Payment { customer_id: 5, amount: 6, account_name: None }, - Payment { customer_id: 7, amount: 8, account_name: None }, - Payment { customer_id: 9, amount: 10, account_name: Some("bar".into()) }, - ]; - - // Now let's insert payments to the database - conn.exec_batch( - r"INSERT INTO payment (customer_id, amount, account_name) - VALUES (:customer_id, :amount, :account_name)", - payments.iter().map(|p| params! { - "customer_id" => p.customer_id, - "amount" => p.amount, - "account_name" => &p.account_name, - }) - )?; - - // Let's select payments from database. Type inference should do the trick here. - let selected_payments = conn - .query_map( - "SELECT customer_id, amount, account_name from payment", - |(customer_id, amount, account_name)| { - Payment { customer_id, amount, account_name } - }, - )?; - for payment in selected_payments { + let selected_payments = merchant_repo::find_by_name_or_id("1", &mut conn); + selected_payments.into_iter().for_each(|payment| { println!("{:?}", payment); - } + }); Ok(()) } diff --git a/src/repository/merchant_repo.rs b/src/repository/merchant_repo.rs new file mode 100644 index 0000000..2890121 --- /dev/null +++ b/src/repository/merchant_repo.rs @@ -0,0 +1,16 @@ +use mysql::{params, prelude::Queryable, PooledConn}; + +use crate::entity::merchant::Merchant; + +pub fn find_by_name_or_id( + search: &str, + conn: &mut PooledConn, +) -> Result, mysql::Error> { + let stat = conn + .prep("SELECT m_name, m_id FROM global_data.merchant WHERE m_id = :search OR m_name LIKE :search;") + .unwrap(); + + conn.exec_map(stat, params! {"search" => search}, |(m_name, m_id)| { + Merchant { m_name, m_id } + }) +} diff --git a/src/repository/mod.rs b/src/repository/mod.rs new file mode 100644 index 0000000..892b2c6 --- /dev/null +++ b/src/repository/mod.rs @@ -0,0 +1 @@ +pub mod merchant_repo;