diff options
author | Joris | 2025-01-31 22:28:53 +0100 |
---|---|---|
committer | Joris | 2025-01-31 22:28:53 +0100 |
commit | 0adf5a093494bdb7f5d5c0f12913133e333ddfad (patch) | |
tree | ada6df0f3480647bec99429819f1bfffd36194ce /src/controller | |
parent | 24eeb54a6b7159964e8887ade7fa5173b50feb3a (diff) |
Migrate to tokio_rusqlite
Diffstat (limited to 'src/controller')
-rw-r--r-- | src/controller/balance.rs | 8 | ||||
-rw-r--r-- | src/controller/categories.rs | 13 | ||||
-rw-r--r-- | src/controller/incomes.rs | 25 | ||||
-rw-r--r-- | src/controller/login.rs | 11 | ||||
-rw-r--r-- | src/controller/payments.rs | 30 | ||||
-rw-r--r-- | src/controller/statistics.rs | 6 | ||||
-rw-r--r-- | src/controller/wallet.rs | 4 |
7 files changed, 50 insertions, 47 deletions
diff --git a/src/controller/balance.rs b/src/controller/balance.rs index efe5af6..ae6d810 100644 --- a/src/controller/balance.rs +++ b/src/controller/balance.rs @@ -11,18 +11,18 @@ use crate::payer; use crate::templates; pub async fn get(wallet: &Wallet) -> Response<Full<Bytes>> { - let users = db::users::list(&wallet.pool).await; + let users = db::users::list(&wallet.db_conn).await; - let incomes_from = db::incomes::defined_for_all(&wallet.pool).await; + let incomes_from = db::incomes::defined_for_all(&wallet.db_conn).await; let user_incomes = match incomes_from { - Some(from) => db::incomes::cumulative(&wallet.pool, from).await, + Some(from) => db::incomes::cumulative(&wallet.db_conn, from).await, None => HashMap::new(), }; let template_user_incomes = get_template_user_incomes(&users, &user_incomes); let total_income: i64 = user_incomes.values().sum(); - let user_payments = db::payments::repartition(&wallet.pool).await; + let user_payments = db::payments::repartition(&wallet.db_conn).await; let template_user_payments = get_template_user_payments(&users, &user_payments); let total_payments: i64 = user_payments.iter().map(|p| p.1).sum(); diff --git a/src/controller/categories.rs b/src/controller/categories.rs index fbbd309..8772e38 100644 --- a/src/controller/categories.rs +++ b/src/controller/categories.rs @@ -14,7 +14,7 @@ pub async fn table( wallet: &Wallet, query: queries::Categories, ) -> Response<Full<Bytes>> { - let categories = db::categories::list(&wallet.pool).await; + let categories = db::categories::list(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Categories, @@ -65,7 +65,7 @@ pub async fn create( match validation::category::create(&form) { Some(category) => { - match db::categories::create(&wallet.pool, &category).await { + match db::categories::create(&wallet.db_conn, category).await { Some(id) => { utils::redirect(&format!("/categories?highlight={}", id)) } @@ -86,9 +86,9 @@ async fn update_form_feedback( form: HashMap<String, String>, error: Option<String>, ) -> Response<Full<Bytes>> { - let category = db::categories::get(&wallet.pool, id).await; + let category = db::categories::get(&wallet.db_conn, id).await; let is_category_used = - db::payments::is_category_used(&wallet.pool, id).await; + db::payments::is_category_used(&wallet.db_conn, id).await; let context = minijinja::context!( header => templates::Header::Categories, @@ -119,7 +119,8 @@ pub async fn update( match validation::category::update(&form) { Some(update_category) => { - if db::categories::update(&wallet.pool, id, &update_category).await + if db::categories::update(&wallet.db_conn, id, update_category) + .await { utils::redirect(&format!("/categories?highlight={}", id)) } else { @@ -131,7 +132,7 @@ pub async fn update( } pub async fn delete(id: i64, wallet: &Wallet) -> Response<Full<Bytes>> { - if db::categories::delete(&wallet.pool, id).await { + if db::categories::delete(&wallet.db_conn, id).await { utils::redirect("/categories") } else { update_form_feedback( diff --git a/src/controller/incomes.rs b/src/controller/incomes.rs index ac3a332..09d483e 100644 --- a/src/controller/incomes.rs +++ b/src/controller/incomes.rs @@ -19,8 +19,8 @@ pub async fn table( query: queries::Incomes, ) -> Response<Full<Bytes>> { let page = query.page.unwrap_or(1); - let count = db::incomes::count(&wallet.pool).await; - let incomes = db::incomes::list(&wallet.pool, page, PER_PAGE).await; + let count = db::incomes::count(&wallet.db_conn).await; + let incomes = db::incomes::list(&wallet.db_conn, page, PER_PAGE).await; let max_page = (count as f32 / PER_PAGE as f32).ceil() as i64; let context = minijinja::context!( @@ -68,7 +68,7 @@ async fn create_form_feedback( form: HashMap<String, String>, error: Option<String>, ) -> Response<Full<Bytes>> { - let users = db::users::list(&wallet.pool).await; + let users = db::users::list(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Incomes, @@ -101,7 +101,7 @@ pub async fn create( match validation::income::create(&form) { Some(income) => { if !db::incomes::defined_at( - &wallet.pool, + &wallet.db_conn, income.user_id, income.date, ) @@ -110,9 +110,10 @@ pub async fn create( { error("Un revenu est déjà défini à cette date.").await } else { - match db::incomes::create(&wallet.pool, &income).await { + match db::incomes::create(&wallet.db_conn, income).await { Some(id) => { - let row = db::incomes::get_row(&wallet.pool, id).await; + let row = + db::incomes::get_row(&wallet.db_conn, id).await; let page = (row - 1) / PER_PAGE + 1; utils::redirect(&format!( "/incomes?page={}&highlight={}", @@ -142,8 +143,8 @@ async fn update_form_feedback( form: HashMap<String, String>, error: Option<String>, ) -> Response<Full<Bytes>> { - let users = db::users::list(&wallet.pool).await; - let income = db::incomes::get(&wallet.pool, id).await; + let users = db::users::list(&wallet.db_conn).await; + let income = db::incomes::get(&wallet.db_conn, id).await; let context = minijinja::context!( header => &templates::Header::Incomes, @@ -184,15 +185,15 @@ pub async fn update( match validation::income::update(&form) { Some(income) => { let existing_incomes = db::incomes::defined_at( - &wallet.pool, + &wallet.db_conn, income.user_id, income.date, ) .await; if existing_incomes.into_iter().any(|eid| eid != id) { error("Un revenu est déjà défini à cette date.").await - } else if db::incomes::update(&wallet.pool, id, &income).await { - let row = db::incomes::get_row(&wallet.pool, id).await; + } else if db::incomes::update(&wallet.db_conn, id, income).await { + let row = db::incomes::get_row(&wallet.db_conn, id).await; let page = (row - 1) / PER_PAGE + 1; utils::redirect(&format!( "/incomes?page={}&highlight={}", @@ -211,7 +212,7 @@ pub async fn delete( wallet: &Wallet, query: queries::Incomes, ) -> Response<Full<Bytes>> { - if db::incomes::delete(&wallet.pool, id).await { + if db::incomes::delete(&wallet.db_conn, id).await { utils::redirect(&format!("/incomes?page={}", query.page.unwrap_or(1))) } else { update_form_feedback( diff --git a/src/controller/login.rs b/src/controller/login.rs index 31370cc..d01f799 100644 --- a/src/controller/login.rs +++ b/src/controller/login.rs @@ -3,8 +3,8 @@ use http_body_util::Full; use hyper::body::Bytes; use hyper::header::SET_COOKIE; use hyper::Response; -use sqlx::sqlite::SqlitePool; use std::collections::HashMap; +use tokio_rusqlite::Connection; use crate::controller::utils::with_headers; use crate::controller::wallet::Wallet; @@ -35,18 +35,19 @@ pub async fn login( assets: &HashMap<String, String>, templates: &minijinja::Environment<'_>, form: HashMap<String, String>, - pool: SqlitePool, + db_conn: Connection, ) -> Response<Full<Bytes>> { match validation::login::login(&form) { Some(login) => { - match db::users::get_password_hash(&pool, login.email.clone()).await + match db::users::get_password_hash(&db_conn, login.email.clone()) + .await { Some(hash) => match bcrypt::verify(login.password, &hash) { Ok(true) => { let login_token = cookie::generate_token(); if db::users::set_login_token( - &pool, + &db_conn, login.email, login_token.clone().to_string(), ) @@ -110,7 +111,7 @@ async fn not_authorized( } pub async fn logout(config: &Config, wallet: &Wallet) -> Response<Full<Bytes>> { - if db::users::remove_login_token(&wallet.pool, wallet.user.id).await { + if db::users::remove_login_token(&wallet.db_conn, wallet.user.id).await { with_headers( utils::redirect("/"), vec![(SET_COOKIE, &cookie::logout(config))], diff --git a/src/controller/payments.rs b/src/controller/payments.rs index b5c0256..1ffa09f 100644 --- a/src/controller/payments.rs +++ b/src/controller/payments.rs @@ -19,12 +19,12 @@ pub async fn table( query: queries::Payments, ) -> Response<Full<Bytes>> { let page = query.page.unwrap_or(1); - let count = db::payments::count(&wallet.pool, &query).await; + let count = db::payments::count(&wallet.db_conn, &query).await; let payments = - db::payments::list_for_table(&wallet.pool, &query, PER_PAGE).await; + db::payments::list_for_table(&wallet.db_conn, &query, PER_PAGE).await; let max_page = (count.count as f32 / PER_PAGE as f32).ceil() as i64; - let users = db::users::list(&wallet.pool).await; - let categories = db::categories::list(&wallet.pool).await; + let users = db::users::list(&wallet.db_conn).await; + let categories = db::categories::list(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Payments, @@ -60,8 +60,8 @@ async fn create_form_feedback( form: HashMap<String, String>, error: Option<String>, ) -> Response<Full<Bytes>> { - let users = db::users::list(&wallet.pool).await; - let categories = db::categories::list(&wallet.pool).await; + let users = db::users::list(&wallet.db_conn).await; + let categories = db::categories::list(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Payments, @@ -92,10 +92,10 @@ pub async fn create( match validation::payment::create(&form) { Some(create_payment) => { - match db::payments::create(&wallet.pool, &create_payment).await { + match db::payments::create(&wallet.db_conn, create_payment.clone()).await { Some(id) => { let row = db::payments::get_row( - &wallet.pool, + &wallet.db_conn, id, create_payment.frequency, ) @@ -139,9 +139,9 @@ async fn update_form_feedback( form: HashMap<String, String>, error: Option<String>, ) -> Response<Full<Bytes>> { - let payment = db::payments::get_for_form(&wallet.pool, id).await; - let users = db::users::list(&wallet.pool).await; - let categories = db::categories::list(&wallet.pool).await; + let payment = db::payments::get_for_form(&wallet.db_conn, id).await; + let users = db::users::list(&wallet.db_conn).await; + let categories = db::categories::list(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Payments, @@ -181,10 +181,10 @@ pub async fn update( match validation::payment::update(&form) { Some(update_payment) => { - if db::payments::update(&wallet.pool, id, &update_payment).await { + if db::payments::update(&wallet.db_conn, id, update_payment).await { let frequency = query.frequency.unwrap_or(Frequency::Punctual); let row = - db::payments::get_row(&wallet.pool, id, frequency).await; + db::payments::get_row(&wallet.db_conn, id, frequency).await; let page = (row - 1) / PER_PAGE + 1; // TODO: keep name, cost, user and category when updating a line let query = queries::Payments { @@ -212,7 +212,7 @@ pub async fn delete( wallet: &Wallet, query: queries::Payments, ) -> Response<Full<Bytes>> { - if db::payments::delete(&wallet.pool, id).await { + if db::payments::delete(&wallet.db_conn, id).await { let query = queries::Payments { highlight: None, ..query @@ -234,7 +234,7 @@ pub async fn search_category( wallet: &Wallet, query: queries::PaymentCategory, ) -> Response<Full<Bytes>> { - match db::payments::search_category(&wallet.pool, query.payment_name).await + match db::payments::search_category(&wallet.db_conn, query.payment_name).await { Some(category_id) => utils::with_headers( Response::new(format!("{}", category_id).into()), diff --git a/src/controller/statistics.rs b/src/controller/statistics.rs index e57e2be..a546c67 100644 --- a/src/controller/statistics.rs +++ b/src/controller/statistics.rs @@ -8,9 +8,9 @@ use crate::db; use crate::templates; pub async fn get(wallet: &Wallet) -> Response<Full<Bytes>> { - let categories = db::categories::list(&wallet.pool).await; - let payments = db::payments::list_for_stats(&wallet.pool).await; - let incomes = db::incomes::total_each_month(&wallet.pool).await; + let categories = db::categories::list(&wallet.db_conn).await; + let payments = db::payments::list_for_stats(&wallet.db_conn).await; + let incomes = db::incomes::total_each_month(&wallet.db_conn).await; let context = minijinja::context!( header => templates::Header::Statistics, diff --git a/src/controller/wallet.rs b/src/controller/wallet.rs index 7537406..edc773d 100644 --- a/src/controller/wallet.rs +++ b/src/controller/wallet.rs @@ -1,11 +1,11 @@ -use sqlx::sqlite::SqlitePool; use std::collections::HashMap; +use tokio_rusqlite::Connection; use crate::model::user::User; #[derive(Clone)] pub struct Wallet { - pub pool: SqlitePool, + pub db_conn: Connection, pub assets: HashMap<String, String>, pub templates: minijinja::Environment<'static>, pub user: User, |