mirror of
https://github.com/pcvolkmer/bzkf-rwdp-check.git
synced 2025-04-19 19:16:51 +00:00
feat: show items not equal within db and xml
This commit is contained in:
parent
58026f11d0
commit
fd45467513
@ -124,6 +124,11 @@ impl Meldung {
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn no_linebreak(&self) -> String {
|
||||
let re = Regex::new(r"\n\s*").unwrap();
|
||||
re.replace_all(&self.raw_value, "").trim().to_string()
|
||||
}
|
||||
}
|
||||
|
||||
pub fn to_database_id(id: &str) -> Option<String> {
|
||||
@ -147,7 +152,7 @@ pub fn to_database_id(id: &str) -> Option<String> {
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use crate::lkrexport::LkrExportProtocolFile;
|
||||
use crate::lkrexport::{LkrExportProtocolFile, Meldung};
|
||||
|
||||
#[test]
|
||||
fn should_read_xml_file_content() {
|
||||
@ -204,4 +209,16 @@ mod tests {
|
||||
Some("C17.2".to_string())
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn should_get_meldung_with_trimmed_margin() {
|
||||
let meldung = Meldung {
|
||||
raw_value: " <Test>\n <Test2>TestInhalt 3</Test2>\n</Test>\n".into(),
|
||||
};
|
||||
|
||||
assert_eq!(
|
||||
meldung.no_linebreak(),
|
||||
"<Test><Test2>TestInhalt 3</Test2></Test>".to_string()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
46
src/main.rs
46
src/main.rs
@ -29,7 +29,7 @@ use itertools::Itertools;
|
||||
use crate::cli::{Cli, SubCommand};
|
||||
use crate::common::{Check, DiffRecord, Icd10GroupSize};
|
||||
use crate::database::DatabaseSource;
|
||||
use crate::lkrexport::{to_database_id, LkrExportProtocolFile};
|
||||
use crate::lkrexport::{to_database_id, LkrExportProtocolFile, Meldung};
|
||||
|
||||
mod cli;
|
||||
mod common;
|
||||
@ -467,6 +467,11 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
.map(|meldung| (meldung.id().unwrap(), meldung))
|
||||
.collect::<HashMap<_, _>>();
|
||||
|
||||
let missing_xml_ids = db_meldungen
|
||||
.keys()
|
||||
.filter(|&key| !xml_meldungen.contains_key(key))
|
||||
.collect_vec();
|
||||
|
||||
let _ = term.clear_last_lines(1);
|
||||
|
||||
let _ = term.write_line(
|
||||
@ -512,11 +517,6 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
});
|
||||
}
|
||||
|
||||
let missing_xml_ids = db_meldungen
|
||||
.keys()
|
||||
.filter(|&key| !xml_meldungen.contains_key(key))
|
||||
.collect_vec();
|
||||
|
||||
if !missing_xml_ids.is_empty() {
|
||||
let _ = term.write_line(
|
||||
&style("\nIn der Protokolldatei fehlende Meldungen:")
|
||||
@ -558,6 +558,40 @@ fn main() -> Result<(), Box<dyn Error>> {
|
||||
let _ = term.write_line(&item.to_string());
|
||||
});
|
||||
}
|
||||
|
||||
let different_content = db_meldungen
|
||||
.iter()
|
||||
.filter(|(id, _)| !missing_xml_ids.contains(id))
|
||||
.filter(|(id, meldung)| {
|
||||
xml_meldungen
|
||||
.get(&id.to_string())
|
||||
.unwrap_or(&Meldung {
|
||||
raw_value: String::new(),
|
||||
})
|
||||
.no_linebreak()
|
||||
!= meldung.no_linebreak()
|
||||
})
|
||||
.map(|(_, meldung)| meldung.id().unwrap_or("?".into()))
|
||||
.collect_vec();
|
||||
|
||||
if !different_content.is_empty() {
|
||||
let _ = term.write_line(
|
||||
&style(&format!(
|
||||
"\nFolgende {} Meldungen unterscheiden sich in der Datenbank und der Protokolldatei:",
|
||||
different_content.len()
|
||||
))
|
||||
.yellow()
|
||||
.to_string(),
|
||||
);
|
||||
|
||||
different_content.iter().sorted().for_each(|item| {
|
||||
let _ = term.write_line(&format!(
|
||||
"{} ({})",
|
||||
item,
|
||||
to_database_id(item).unwrap_or("?".into())
|
||||
));
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user