adding a lot more funcitonality to core library

This commit is contained in:
Chris Cochrun 2024-10-09 13:39:48 -05:00
parent ba51c56169
commit 3c87385895
7 changed files with 378 additions and 105 deletions

View file

@ -1,4 +1,12 @@
#[derive(Debug, Clone, Default, PartialEq, Eq)]
use std::path::PathBuf;
use serde::{Deserialize, Serialize};
use sqlx::query;
use tracing::error;
use crate::model::Model;
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub enum PresKind {
Html,
#[default]
@ -6,10 +14,12 @@ pub enum PresKind {
Generic,
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize)]
pub struct Presentation {
title: String,
kind: PresKind,
pub id: i32,
pub title: String,
pub path: PathBuf,
pub kind: PresKind,
}
impl Presentation {
@ -25,13 +35,64 @@ impl Presentation {
}
}
impl Model<Presentation> {
pub fn load_from_db(&mut self) {
let rt = tokio::runtime::Runtime::new().unwrap();
rt.block_on(async {
let result = query!(r#"SELECT id as "id: i32", title, filePath as "path", html from presentations"#).fetch_all(&mut self.db).await;
match result {
Ok(v) => {
for presentation in v.into_iter() {
let _ = self.add_item(Presentation {
id: presentation.id,
title: presentation.title,
path: presentation.path.into(),
kind: if presentation.html {
PresKind::Html
} else {
PresKind::Pdf
}
});
}
}
Err(e) => error!("There was an error in converting presentations: {e}"),
}
});
}
}
#[cfg(test)]
mod test {
use crate::presentations::{PresKind, Presentation};
use super::*;
use pretty_assertions::assert_eq;
fn test_presentation() -> Presentation {
Presentation {
id: 54,
title: "20240327T133649--12-isaiah-and-jesus__lesson_project_tfc".into(),
path: PathBuf::from(
"file:///home/chris/docs/notes/lessons/20240327T133649--12-isaiah-and-jesus__lesson_project_tfc.html",
),
kind: PresKind::Html,
}
}
#[test]
pub fn test_presentation() {
pub fn test_pres() {
let pres = Presentation::new();
assert_eq!(pres.get_kind(), &PresKind::Pdf)
}
#[test]
pub fn test_db_and_model() {
let mut presentation_model: Model<Presentation> =
Model::default();
presentation_model.load_from_db();
if let Some(presentation) = presentation_model.get_item(10) {
let test_presentation = test_presentation();
assert_eq!(&test_presentation, presentation);
} else {
assert!(false);
}
}
}