diff --git a/README.md b/README.md index 88b1c48..5b41f00 100644 --- a/README.md +++ b/README.md @@ -6,8 +6,8 @@ Object-oriented design concept tested. Location: .config/rcc/env ``` -USERNAME=root -PASSWORD=cidb +DB_USERNAME=root +DB_PASSWORD=cidb DB=cidb PORT=3306 ``` diff --git a/src/cli/command.rs b/src/cli/command.rs index 38ebae6..6a147a1 100644 --- a/src/cli/command.rs +++ b/src/cli/command.rs @@ -44,4 +44,7 @@ pub enum Commands { #[arg(short, long)] log: bool, }, + Use { + file_name: String, + } } diff --git a/src/cli/controller.rs b/src/cli/controller.rs index 6425c56..20770bb 100644 --- a/src/cli/controller.rs +++ b/src/cli/controller.rs @@ -54,6 +54,10 @@ pub fn process_args(args: Cli, db: Db) -> Result<(), Box> job_service.get_job_by_id(&job_id)?; } } + Commands::Use { file_name } => { + let mut filter_service: FilterService = container::get_filter_service(db); + filter_service.get_filter_uses(&file_name)?; + }, } Ok(()) diff --git a/src/entity/filter_uses.rs b/src/entity/filter_uses.rs new file mode 100644 index 0000000..94bc469 --- /dev/null +++ b/src/entity/filter_uses.rs @@ -0,0 +1,13 @@ +#[derive(Debug, PartialEq, Eq)] +pub struct FilterUses { + pub filter_module_id: usize, + pub description: String, + pub filter_module_no: String, + pub filter_user: usize, + pub filter_id: usize, + pub active: String, + pub merchant: String, + pub ep_id: usize, + pub ep_no: String, + pub filter_no: String, +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs index c3a809f..7f01198 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -5,3 +5,4 @@ pub mod filter_log; pub mod filter_config; pub mod file; pub mod job; +pub mod filter_uses; diff --git a/src/repository/filter_repo.rs b/src/repository/filter_repo.rs index 73e63a0..d222d33 100644 --- a/src/repository/filter_repo.rs +++ b/src/repository/filter_repo.rs @@ -1,8 +1,12 @@ +use core::result::Result; + use mysql::{params, prelude::Queryable, PooledConn}; use crate::{ database::db::Db, - entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog}, + entity::{ + filter::Filter, filter_config::FilterConfig, filter_log::FilterLog, filter_uses::FilterUses, + }, }; #[derive(Debug)] @@ -87,4 +91,64 @@ impl FilterRepo { }, ) } + + pub fn find_filter_uses(&mut self, filter_file: &str) -> Result, mysql::Error> { + let mut connection: PooledConn = self.db.get_connection()?; + let stat = connection.prep( + " + SELECT + t1.filter_module_id, + t2.description, + t1.filter_module_no, + t1.filter_user, + t2.filter_id, + t2.filter_is_active, + t3.ep_id, + t4.m_name as merchant, + t2.filter_no, + t3.ep_no, + t2.filter_is_active as active + FROM global_data.filter_modules t1 + JOIN filter t2 ON t1.filter_module_id = t2.filter_module_id + JOIN exchange_point t3 ON t3.ep_id = t2.ep_id + JOIN global_data.merchant t4 ON t4.m_id = t3.m_id + WHERE + t4.is_deleted = 0 + AND t2.is_deleted = 0 + AND t1.file_name LIKE :search_like + ", + )?; + + let search_like = format!("%{}%", filter_file); + + let params = params! {"search_like" => search_like}; + + connection.exec_map( + stat, + params, + |( + filter_module_id, + description, + filter_module_no, + filter_user, + filter_id, + active, + ep_id, + merchant, + filter_no, + ep_no, + )| FilterUses { + filter_module_id, + description, + filter_module_no, + filter_user, + filter_id, + active, + ep_id, + merchant, + filter_no, + ep_no, + }, + ) + } } diff --git a/src/service/filter_service.rs b/src/service/filter_service.rs index 97f71a0..d481e0d 100644 --- a/src/service/filter_service.rs +++ b/src/service/filter_service.rs @@ -2,7 +2,7 @@ use colored::Colorize; use rcc::TerminalSize; use crate::{ - entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog}, + entity::{filter::Filter, filter_config::FilterConfig, filter_log::FilterLog, filter_uses::FilterUses}, repository::filter_repo::FilterRepo, }; @@ -17,6 +17,35 @@ impl FilterService { Self { repo } } + pub fn get_filter_uses(&mut self, file_name: &str) -> Result<(), Box> { + let uses = self.repo.find_filter_uses(file_name)?; + + if uses.is_empty() { + println!("No use for file/module found!"); + } else { + uses.into_iter().for_each(|filter_use: FilterUses| { + let is_active = if filter_use.active.eq("1") { + "true".to_string() + } else { + "false".to_string() + }; + println!("{}", "-".repeat(self.get_width())); + + println!("Module ID: {}", filter_use.filter_module_id); + println!("ModuleNo: {}", filter_use.filter_module_no); + println!("FilterUser: {}", filter_use.filter_user); + println!("Description: {}", filter_use.description); + println!("FilterId: {}", filter_use.filter_id); + println!("FilterNo: {}", filter_use.filter_no); + println!("Merchant: {}", filter_use.merchant); + println!("Active: {}", is_active); + }); + + } + + Ok(()) + } + pub fn get_filter( &mut self, filter_id: &usize,