advotracker: services substructure
Signed-off-by: Ralf Zerres <ralf.zerres@networkx.de>
This commit is contained in:
119
advotracker/src/services/import/allianzdirectcall.rs
Normal file
119
advotracker/src/services/import/allianzdirectcall.rs
Normal file
@@ -0,0 +1,119 @@
|
||||
/*
|
||||
* advotracker - Hotline tackingtool for Advocats
|
||||
*
|
||||
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||
* SPDX-License-Identifier: (0BSD or MIT)
|
||||
*/
|
||||
|
||||
use chrono::{Local, DateTime};
|
||||
use locales::t;
|
||||
use std::error::Error;
|
||||
use tracing::trace;
|
||||
|
||||
//use crate::db::redis;
|
||||
use crate::data;
|
||||
|
||||
/// export as csv format
|
||||
/// https://docs.rs/csv/1.1.3/csv/cookbook/index.html
|
||||
/// https://blog.burntsushi.net/csv/
|
||||
pub fn export(p: &mut String, lang: &String) -> Result<(), Box<dyn Error>> {
|
||||
use std::fs::File;
|
||||
use std::path::Path;
|
||||
//use std::ffi::OsStr;
|
||||
|
||||
let mut res = t!("csv.export.started", lang);
|
||||
let mut state = t!("state.started", lang);
|
||||
trace!(target: "advotrackerd", process = ?res, state = ?state);
|
||||
|
||||
// Note: slash syntax also works on Windows!
|
||||
let path = Path::new(p);
|
||||
|
||||
// open the file
|
||||
let file = File::open(path)?;
|
||||
|
||||
trace!(target: "csv.export", extension = ?path.extension(), file = ?file);
|
||||
state = t!("state.finished", lang);
|
||||
res = t!("csv.export.finished", lang);
|
||||
trace!(target: "csv-export", process = ?res, state = ?state);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// import AllianzDirectCall data from a csv delimeted file
|
||||
/// save records to redis backend
|
||||
/// https://docs.rs/csv/1.1.3/csv/cookbook/index.html
|
||||
/// https://blog.burntsushi.net/csv/
|
||||
pub fn import(p: &mut String, lang: &String) -> Result<u32, Box<dyn Error>> {
|
||||
use std::fs::File;
|
||||
use std::path::Path;
|
||||
use std::ffi::OsStr;
|
||||
|
||||
let mut res = t!("csv.import.started", lang);
|
||||
let mut state = t!("state.started", lang);
|
||||
let dt_start: DateTime<Local> = Local::now();
|
||||
|
||||
trace!(target: "advotrackerd", process = ?res, state = ?state, date_start = ?dt_start.to_string());
|
||||
|
||||
// Note: slash syntax also workd on Windows!
|
||||
let path = Path::new(p);
|
||||
|
||||
// must be a readable file
|
||||
trace!(target: "advotrackerd", path = ?path);
|
||||
assert_eq!(path.is_file(), true);
|
||||
|
||||
// only accept files with '.txt' extensions
|
||||
let extension = path.extension();
|
||||
assert_eq!(extension, Some(OsStr::new("txt")));
|
||||
|
||||
// open the file
|
||||
let file = File::open(path)?;
|
||||
trace!(target: "advotrackerd", extension = ?extension, file = ?file);
|
||||
|
||||
// Build the CSV reader and iterate over each record.
|
||||
let mut csv_reader = csv::ReaderBuilder::new()
|
||||
.has_headers(true)
|
||||
.delimiter(b' ')
|
||||
//.comment(Some(b'#'))
|
||||
//.flexible(true)
|
||||
.from_reader(file);
|
||||
{
|
||||
// We nest this call in its own scope because of lifetimes.
|
||||
let headers = csv_reader.headers()?;
|
||||
trace!(target: "advotrackerd", header = ?headers);
|
||||
}
|
||||
|
||||
//for result in csv_reader.records() {
|
||||
let mut count = 0;
|
||||
for result in csv_reader.deserialize() {
|
||||
// The iterator yields Result<StringRecord, Error>, so we check the
|
||||
// error here.
|
||||
//let record = result?;
|
||||
let _record: data::AllianzPolicyNumber = result?;
|
||||
//println!("{:?}", record);
|
||||
|
||||
// WIP: write to redis backend
|
||||
// policy_data.push(PolicyData {
|
||||
// date_inserted: Some(Utc::now().naive_utc()),
|
||||
// dion: 1,
|
||||
// policy_code: PolicyCode::AS,
|
||||
// policy_number,
|
||||
// status: Status::Active,
|
||||
// });
|
||||
|
||||
count +=1;
|
||||
}
|
||||
|
||||
let dt_end: DateTime<Local> = Local::now();
|
||||
let duration = dt_end.signed_duration_since(dt_start);
|
||||
println!("Duration: {:#?}", duration);
|
||||
//let seconds = duration.secs;
|
||||
//println!("Seconds: {:#?}", seconds);
|
||||
trace!(target: "advotrackerd", record_count = ?count, duration = ?duration);
|
||||
|
||||
state = t!("state.finished", lang);
|
||||
res = t!("csv.import.finished", lang);
|
||||
trace!(target: "advotrackerd", process = ?res, state = ?state, date_stop = ?dt_end.to_string());
|
||||
|
||||
//Ok(count, duration.seconds())
|
||||
Ok(count)
|
||||
}
|
||||
23
advotracker/src/services/import/csv.rs
Normal file
23
advotracker/src/services/import/csv.rs
Normal file
@@ -0,0 +1,23 @@
|
||||
use std::error::Error;
|
||||
use std::io;
|
||||
use std::process;
|
||||
|
||||
/// import from csv format (Standard in)
|
||||
fn import() -> Result<(), Box<dyn Error>> {
|
||||
// Build the CSV reader and iterate over each record.
|
||||
let mut csv_reader = csv::Reader::from_reader(io::stdin());
|
||||
for result in csv_reader.records() {
|
||||
// The iterator yields Result<StringRecord, Error>, so we check the
|
||||
// error here.
|
||||
let record = result?;
|
||||
println!("{:?}", record);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn main() {
|
||||
if let Err(err) = import() {
|
||||
println!("error running example: {}", err);
|
||||
process::exit(1);
|
||||
}
|
||||
}
|
||||
9
advotracker/src/services/import/mod.rs
Normal file
9
advotracker/src/services/import/mod.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* advotracker - Hotline tackingtool for Advocats
|
||||
*
|
||||
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||
* SPDX-License-Identifier: (0BSD or MIT)
|
||||
*/
|
||||
|
||||
/// Alliand DirecCall module
|
||||
pub mod allianzdirectcall;
|
||||
37
advotracker/src/services/locales/allianzdirectcall.json
Normal file
37
advotracker/src/services/locales/allianzdirectcall.json
Normal file
@@ -0,0 +1,37 @@
|
||||
{
|
||||
"err.lang.not_found": {
|
||||
"de_DE.UTF-8": "Konnte die Umgebungsvarialbe LANG nicht auslesen",
|
||||
"de": "Konnte die Umgebungsvarialbe LANG nicht auslesen",
|
||||
"en": "Couldn't read LANG"
|
||||
},
|
||||
"csv_import.started": {
|
||||
"de_DE.UTF-8": "importieren von einer csv-datei gestartet",
|
||||
"de": "importieren von einer csv-datei gestartet",
|
||||
"en": "import from a csv-file started"
|
||||
},
|
||||
"csv_import.finished": {
|
||||
"de_DE.UTF-8": "importieren von einer csv-datei beendet",
|
||||
"de": "importieren von einer csv-datei beendet",
|
||||
"en": "import from a csv-file finished"
|
||||
},
|
||||
"csv_export.started": {
|
||||
"de_DE.UTF-8": "exportieren in eine csv-datei gestartet",
|
||||
"de": "exportieren in eine csv-datei gestartet",
|
||||
"en": "export to csv-file started"
|
||||
},
|
||||
"csv_export.finished": {
|
||||
"de_DE.UTF-8": "exportieren in eine csv-datei beendet",
|
||||
"de": "exportieren in eine csv-datei beendet",
|
||||
"en": "export to csv-file finished"
|
||||
},
|
||||
"state.started": {
|
||||
"de_DE.UTF-8": "gestartet",
|
||||
"de": "gestartet",
|
||||
"en": "started"
|
||||
},
|
||||
"state.finished": {
|
||||
"de_DE.UTF-8": "beendet",
|
||||
"de": "beended",
|
||||
"en": "finished"
|
||||
}
|
||||
}
|
||||
9
advotracker/src/services/mod.rs
Normal file
9
advotracker/src/services/mod.rs
Normal file
@@ -0,0 +1,9 @@
|
||||
/*
|
||||
* advotracker - Hotline tackingtool for Advocats
|
||||
*
|
||||
* Copyright 2020 Ralf Zerres <ralf.zerres@networkx.de>
|
||||
* SPDX-License-Identifier: (0BSD or MIT)
|
||||
*/
|
||||
|
||||
/// advotracker import modules
|
||||
pub mod import;
|
||||
Reference in New Issue
Block a user