diff --git a/src/cli/command.rs b/src/cli/command.rs index 19aaebc..37313b5 100644 --- a/src/cli/command.rs +++ b/src/cli/command.rs @@ -32,5 +32,9 @@ pub enum Commands { config: bool, #[arg(short, long)] log: bool, + }, + Page { + // #[arg(short, long)] + page_id: usize } } diff --git a/src/container.rs b/src/container.rs index 752cd9b..365aeb8 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}, + repository::{filter_repo::FilterRepo, merchant_repo::MerchantRepo, schema_repo::SchemaRepo, file_repo::FileRepo}, service::{ filter_service::FilterService, merchant_service::MerchantService, - schema_service::SchemaService, + schema_service::SchemaService, file_service::FileService, }, }; @@ -22,3 +22,8 @@ pub fn get_schema_service(pool: &mut PooledConn) -> SchemaService { let repo = SchemaRepo::new(pool); return SchemaService::new(repo); } + +pub fn get_page_service(pool: &mut PooledConn) -> FileService { + let repo = FileRepo::new(pool); + return FileService::new(repo); +} diff --git a/src/entity/file.rs b/src/entity/file.rs new file mode 100644 index 0000000..5b3e64a --- /dev/null +++ b/src/entity/file.rs @@ -0,0 +1,6 @@ +#[derive(Debug, PartialEq, Eq)] +pub struct Page { + pub m_id: usize, + pub title: String, + pub file: String, +} diff --git a/src/entity/mod.rs b/src/entity/mod.rs index 57237a7..230c022 100644 --- a/src/entity/mod.rs +++ b/src/entity/mod.rs @@ -3,3 +3,4 @@ pub mod schema; pub mod filter; pub mod filter_log; pub mod filter_config; +pub mod file; diff --git a/src/main.rs b/src/main.rs index 031197a..2ceedd3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use cli::command::{Cli, Commands}; use database::db::Db; use mysql::PooledConn; use service::{ - filter_service::FilterService, merchant_service::MerchantService, schema_service::SchemaService, + filter_service::FilterService, merchant_service::MerchantService, schema_service::SchemaService, file_service::FileService, }; pub mod cli; @@ -43,6 +43,10 @@ fn main() -> std::result::Result<(), Box> { filter_service.get_filter_log(&filter_id) } } + Commands::Page { page_id } => { + let file_service: FileService = container::get_page_service(&mut conn); + file_service.get_page(&page_id); + } } Ok(()) diff --git a/src/repository/file_repo.rs b/src/repository/file_repo.rs new file mode 100644 index 0000000..8760e4c --- /dev/null +++ b/src/repository/file_repo.rs @@ -0,0 +1,28 @@ +use mysql::{PooledConn, params, prelude::Queryable}; + +use crate::entity::file::Page; + +#[derive(Debug)] +pub struct FileRepo<'a> { + db_pool: &'a mut PooledConn, +} + +impl<'a> FileRepo<'a> { + pub fn new(db_pool: &'a mut PooledConn) -> Self { + Self { db_pool } + } + + pub fn find_page(self, file_id: &usize) -> Result, mysql::Error> { + let stat = self.db_pool + .prep("SELECT m_id, description, file FROM global_data.effi_file_mapping WHERE file_id = :file_id") + .unwrap(); + + + self.db_pool.exec_map( + stat, + params! {"file_id" => file_id}, + |(m_id, description, file)| Page { m_id, title: description, file }, + ) + + } +} diff --git a/src/repository/mod.rs b/src/repository/mod.rs index a54a0ca..9d9c384 100644 --- a/src/repository/mod.rs +++ b/src/repository/mod.rs @@ -1,3 +1,4 @@ pub mod merchant_repo; pub mod schema_repo; pub mod filter_repo; +pub mod file_repo; diff --git a/src/service/file_service.rs b/src/service/file_service.rs new file mode 100644 index 0000000..3c51476 --- /dev/null +++ b/src/service/file_service.rs @@ -0,0 +1,32 @@ +use crate::{entity::file::Page, repository::file_repo::FileRepo}; + +pub struct FileService<'a> { + repo: FileRepo<'a>, +} + +impl<'a> FileService<'a> { + pub fn new(repo: FileRepo<'a>) -> Self { + Self { repo } + } + + pub fn get_page(self, page_id: &usize) { + let result = self.repo.find_page(page_id); + + match result { + Ok(page) => { + if page.is_empty() { + println!("No page found."); + } else { + page.into_iter().for_each(|page: Page| { + println!("{}", "-".repeat(150)); + println!("M-ID: {}", page.m_id); + println!("FileName: {}", page.file); + println!("Title: {}", page.title); + }); + println!("{}", "-".repeat(150)); + } + } + Err(err) => panic!("{}", err), + } + } +} diff --git a/src/service/mod.rs b/src/service/mod.rs index b9e4657..f2be5d3 100644 --- a/src/service/mod.rs +++ b/src/service/mod.rs @@ -1,3 +1,4 @@ pub mod merchant_service; pub mod schema_service; pub mod filter_service; +pub mod file_service;