diff --git a/src/cli/command.rs b/src/cli/command.rs index 37313b5..234cb4a 100644 --- a/src/cli/command.rs +++ b/src/cli/command.rs @@ -36,5 +36,8 @@ pub enum Commands { Page { // #[arg(short, long)] page_id: usize + }, + Job { + job_id: usize } } diff --git a/src/container.rs b/src/container.rs index 365aeb8..3b96925 100644 --- a/src/container.rs +++ b/src/container.rs @@ -1,10 +1,10 @@ use mysql::PooledConn; use crate::{ - repository::{filter_repo::FilterRepo, merchant_repo::MerchantRepo, schema_repo::SchemaRepo, file_repo::FileRepo}, + repository::{filter_repo::FilterRepo, merchant_repo::MerchantRepo, schema_repo::SchemaRepo, file_repo::FileRepo, job_repo::JobRepo}, service::{ filter_service::FilterService, merchant_service::MerchantService, - schema_service::SchemaService, file_service::FileService, + schema_service::SchemaService, file_service::FileService, job_service::JobService, }, }; @@ -27,3 +27,8 @@ pub fn get_page_service(pool: &mut PooledConn) -> FileService { let repo = FileRepo::new(pool); return FileService::new(repo); } + +pub(crate) fn get_job_service(pool: &mut PooledConn) -> JobService { + let repo = JobRepo::new(pool); + return JobService::new(repo); +} diff --git a/src/entity/job.rs b/src/entity/job.rs new file mode 100644 index 0000000..2c991d3 --- /dev/null +++ b/src/entity/job.rs @@ -0,0 +1,5 @@ +#[derive(Debug, PartialEq, Eq)] +pub struct Job { + pub file_name: String, + pub description: String, +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs index 230c022..c3a809f 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -4,3 +4,4 @@ pub mod filter; pub mod filter_log; pub mod filter_config; pub mod file; +pub mod job; diff --git a/src/main.rs b/src/main.rs index 2ceedd3..a3f5b80 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,8 @@ use cli::command::{Cli, Commands}; use database::db::Db; use mysql::PooledConn; use service::{ - filter_service::FilterService, merchant_service::MerchantService, schema_service::SchemaService, file_service::FileService, + file_service::FileService, filter_service::FilterService, job_service::JobService, + merchant_service::MerchantService, schema_service::SchemaService, }; pub mod cli; @@ -25,7 +26,7 @@ fn main() -> std::result::Result<(), Box> { merchant_service.get_merchant(&search.unwrap()); } Commands::Schema { search } => { - let schema_service: SchemaService = container::get_schema_service(&mut conn); + let mut schema_service: SchemaService = container::get_schema_service(&mut conn); schema_service.get_columns(&search.unwrap()) } Commands::Filter { @@ -47,6 +48,10 @@ fn main() -> std::result::Result<(), Box> { let file_service: FileService = container::get_page_service(&mut conn); file_service.get_page(&page_id); } + Commands::Job { job_id } => { + let mut job_service: JobService = container::get_job_service(&mut conn); + job_service.get_job_by_id(&job_id); + } } Ok(()) diff --git a/src/repository/job_repo.rs b/src/repository/job_repo.rs new file mode 100644 index 0000000..b4b458d --- /dev/null +++ b/src/repository/job_repo.rs @@ -0,0 +1,38 @@ +use mysql::{params, prelude::Queryable, PooledConn}; + +use crate::entity::job::Job; + +#[derive(Debug)] +pub struct JobRepo<'a> { + db_pool: &'a mut PooledConn, +} + +impl<'a> JobRepo<'a> { + pub fn new(db_pool: &'a mut PooledConn) -> Self { + Self { db_pool } + } + + pub fn find_by_id(&mut self, job_id: &usize) -> Result, mysql::Error> { + let stat = self + .db_pool + .prep( + "SELECT + jm.file_name, jm.description + FROM jobs j + JOIN global_data.job_modules jm ON jm.job_module_id = j.job_module_id + WHERE + j.job_id = :job_id + ", + ) + .unwrap(); + + self.db_pool.exec_map( + stat, + params! {"job_id" => job_id}, + |(file_name, description)| Job { + file_name, + description, + }, + ) + } +} diff --git a/src/repository/mod.rs b/src/repository/mod.rs index 9d9c384..3bc920c 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -2,3 +2,4 @@ pub mod merchant_repo; pub mod schema_repo; pub mod filter_repo; pub mod file_repo; +pub mod job_repo; diff --git a/src/repository/schema_repo.rs b/src/repository/schema_repo.rs index f2ed230..4ebf603 100644 --- a/src/repository/schema_repo.rs +++ b/src/repository/schema_repo.rs @@ -12,7 +12,7 @@ impl<'a> SchemaRepo<'a> { } pub fn find_by_column( - self, + &mut self, column_name: &str, ) -> Result, mysql::Error> { let stat = self.db_pool diff --git a/src/service/job_service.rs b/src/service/job_service.rs new file mode 100644 index 0000000..16ca4b7 --- /dev/null +++ b/src/service/job_service.rs @@ -0,0 +1,32 @@ +use crate::{repository::job_repo::JobRepo, entity::job::Job}; + +pub struct JobService<'a> { + pub repo: JobRepo<'a>, +} + +impl<'a> JobService<'a> { + pub fn new(repo: JobRepo<'a>) -> Self { + Self { repo } + } + + pub fn get_job_by_id(&mut self, job_id: &usize) { + let result = self.repo.find_by_id(job_id); + + match result { + Ok(job) => { + if job.is_empty() { + println!("Job not found!"); + } else { + job.into_iter().for_each(|job: Job| { + println!("{}", "-".repeat(150)); + println!("FileName: {}", job.file_name); + println!("Description: {}", job.description); + }); + + println!("{}", "-".repeat(150)); + } + }, + Err(err) => panic!("{}", err), + } + } +} diff --git a/src/service/mod.rs b/src/service/mod.rs index f2be5d3..7e98c79 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -2,3 +2,4 @@ pub mod merchant_service; pub mod schema_service; pub mod filter_service; pub mod file_service; +pub mod job_service; diff --git a/src/service/schema_service.rs b/src/service/schema_service.rs index d07ffb2..c978693 100644 --- a/src/service/schema_service.rs +++ b/src/service/schema_service.rs @@ -8,7 +8,7 @@ impl<'a> SchemaService<'a> { pub fn new(repo: SchemaRepo<'a>) -> Self { Self { repo } } - pub fn get_columns(self, column: &str) { + pub fn get_columns(&mut self, column: &str) { let columns = self.repo.find_by_column(column); match columns {