Files
siren/service/src/db/spells/mod.rs
2023-10-05 14:26:02 -04:00

59 lines
2.0 KiB
Rust

mod model;
mod routes;
mod types;
use std::{fs::{metadata, File, read_dir}, path::Path, io::BufReader};
use log::{warn, trace};
pub use model::*;
pub use types::*;
pub use routes::init_routes;
pub fn load_data(data_dir_path: &str) {
if Path::new(data_dir_path).exists() {
let meta = metadata(data_dir_path).unwrap();
if meta.is_dir() {
let spells_dir_path = format!("{}/spells", data_dir_path);
if Path::new(&spells_dir_path).exists() {
let meta = metadata(&spells_dir_path).unwrap();
if meta.is_dir() {
for entry in read_dir(&spells_dir_path).unwrap() {
let entry = entry.unwrap();
let path = entry.path();
if path.is_file() {
let file = File::open(path).unwrap();
let reader = BufReader::new(file);
let result: Result<Vec<Spell>, serde_json::Error> = serde_json::from_reader(reader);
match result {
Ok(spells) => {
for spell in spells {
let mut filters = QueryFilters::default();
filters.by_name = Some(spell.name.clone());
match QuerySpell::get_all(&filters, 100, 1) {
Ok(spells) => {
if spells.len() > 0 {
trace!("Spell '{}' already exists", spell.name);
continue;
}
},
Err(err) => {
warn!("Error checking if spell '{}' exists: {}", spell.name, err);
continue;
}
};
let spell = InsertSpell::insert(spell.into()).unwrap();
trace!("Inserted spell: {}", spell.name);
}
},
Err(err) => warn!("Error reading spells from file: {}", err)
};
}
}
}
}
}
} else {
warn!("Data path '{}' does not exist, no data imported", data_dir_path);
}
}