From 62db608ecb3404a2a9885bf3379b0cac71402aca Mon Sep 17 00:00:00 2001 From: mace Date: Sat, 15 Apr 2023 17:20:07 +0200 Subject: [PATCH] added filter repo --- src/cli/cli.rs | 7 +++++-- src/entity/filter.rs | 8 ++++++++ src/entity/mod.rs | 1 + src/main.rs | 5 ++++- src/repository/filter_repo.rs | 26 ++++++++++++++++++++++++++ src/repository/mod.rs | 1 + src/service/filter_service.rs | 26 ++++++++++++++++++++++++++ src/service/mod.rs | 1 + src/service/schema_service.rs | 17 +++++++++-------- 9 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 src/entity/filter.rs create mode 100644 src/repository/filter_repo.rs create mode 100644 src/service/filter_service.rs diff --git a/src/cli/cli.rs b/src/cli/cli.rs index 202dfdf..47e62be 100644 --- a/src/cli/cli.rs +++ b/src/cli/cli.rs @@ -17,11 +17,14 @@ pub struct Cli { #[derive(Subcommand)] pub enum Commands { Merch { - #[arg(short = 's', long = "search")] + // #[arg(short = 's', long = "search")] search: Option, }, Schema { - #[arg(short = 's', long = "search")] + // #[arg(short = 's', long = "search")] search: Option, + }, + Filter { + filter_id: usize } } diff --git a/src/entity/filter.rs b/src/entity/filter.rs new file mode 100644 index 0000000..70019a1 --- /dev/null +++ b/src/entity/filter.rs @@ -0,0 +1,8 @@ +#[derive(Debug, PartialEq, Eq)] +pub struct Filter { + pub filter_module_id: usize, + pub file_name: String, + pub description: String, + pub filter_module_no: String, + pub filter_user: usize, +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs index 1b2defe..78c28fd 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -1,2 +1,3 @@ pub mod merchant; pub mod schema; +pub mod filter; diff --git a/src/main.rs b/src/main.rs index 54248cb..a9442b2 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2,7 +2,7 @@ use clap::Parser; use cli::cli::{Cli, Commands}; use database::database::Db; use mysql::PooledConn; -use service::{merchant_service, schema_service}; +use service::{merchant_service, schema_service, filter_service}; pub mod cli; pub mod database; @@ -22,6 +22,9 @@ fn main() -> std::result::Result<(), Box> { Commands::Schema { search } => { schema_service::get_columns(&search.unwrap(), &mut conn) }, + Commands::Filter { filter_id } => { + filter_service::get_filter(&filter_id, &mut conn) + }, } Ok(()) diff --git a/src/repository/filter_repo.rs b/src/repository/filter_repo.rs new file mode 100644 index 0000000..a800dce --- /dev/null +++ b/src/repository/filter_repo.rs @@ -0,0 +1,26 @@ +use mysql::{params, prelude::Queryable, PooledConn}; + +use crate::entity::filter::Filter; + +pub fn find_by_id(filter_id: &usize, conn: &mut PooledConn) -> Result, mysql::Error> { + let stat = conn + .prep( + "SELECT f.filter_module_id, f.file_name, f.description, fm.filter_module_no, fm.filter_user + FROM filter f + JOIN global_data.filter_modules fm ON fm.filter_module_id = f.filter_module_id + WHERE f.filter_id = :filter_id + ") + .unwrap(); + + conn.exec_map( + stat, + params! {"filter_id" => filter_id}, + |(filter_module_id, file_name, description, filter_module_no, filter_user)| Filter { + filter_module_id, + file_name, + description, + filter_module_no, + filter_user, + }, + ) +} diff --git a/src/repository/mod.rs b/src/repository/mod.rs index 35bd01c..a54a0ca 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -1,2 +1,3 @@ pub mod merchant_repo; pub mod schema_repo; +pub mod filter_repo; diff --git a/src/service/filter_service.rs b/src/service/filter_service.rs new file mode 100644 index 0000000..5507727 --- /dev/null +++ b/src/service/filter_service.rs @@ -0,0 +1,26 @@ +use mysql::PooledConn; + +use crate::repository::filter_repo; + +pub fn get_filter(filter_id: &usize, conn: &mut PooledConn) { + let result = filter_repo::find_by_id(filter_id, conn); + + match result { + Ok(filters) => { + if filters.is_empty() { + println!("Filter not found!"); + } else { + filters.into_iter().for_each(|filter| { + println!("{}", "-".repeat(100)); + println!("Module ID: {}", filter.filter_module_id); + println!("FileName: {}", filter.file_name); + println!("Description: {}", filter.description); + println!("ModuleNo: {}", filter.filter_module_no); + println!("FilterUser: {}", filter.filter_user); + }); + println!("{}", "-".repeat(100)); + } + } + Err(err) => panic!("{}", err), + }; +} diff --git a/src/service/mod.rs b/src/service/mod.rs index 2e03769..b9e4657 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,2 +1,3 @@ pub mod merchant_service; pub mod schema_service; +pub mod filter_service; diff --git a/src/service/schema_service.rs b/src/service/schema_service.rs index 3dfb171..bf8fe55 100644 --- a/src/service/schema_service.rs +++ b/src/service/schema_service.rs @@ -2,7 +2,6 @@ use mysql::PooledConn; use crate::repository::schema_repo; - pub fn get_columns(column: &str, conn: &mut PooledConn) { let columns = schema_repo::find_by_column(column, conn); @@ -10,14 +9,16 @@ pub fn get_columns(column: &str, conn: &mut PooledConn) { Ok(columns) => { if columns.is_empty() { println!("No column found!"); - } - columns.into_iter().for_each(|column| { + } else { + columns.into_iter().for_each(|column| { + println!("{}", "-".repeat(100)); + println!("Table name: {}", column.table_name); + println!("Column name: {}", column.column_name); + println!("Type: {}", column.column_type); + }); println!("{}", "-".repeat(100)); - println!("Table name: {}", column.table_name); - println!("Column name: {}", column.column_name); - println!("Type: {}", column.column_type); - }) - }, + } + } Err(err) => panic!("{err}"), } }