use crate::domain as domain_models;
use crate::repositories::repository::Repository;
use anyhow::Result;
use uuid::Uuid;
pub struct JournalService<'a> {
repository: &'a dyn Repository<domain_models::Journal>,
}
impl<'a> JournalService<'a> {
pub fn new(repository: &'a dyn Repository<domain_models::Journal>) -> Self {
Self { repository }
}
pub fn create_journal(self, name: String) -> Result<domain_models::Journal> {
let journal = domain_models::Journal::new(name);
self.repository.add(&journal)?;
Ok(journal)
}
pub fn get_journal(self, journal_id: &Uuid) -> Result<Option<domain_models::Journal>> {
let journal = self.repository.get(journal_id)?;
Ok(journal)
}
pub fn get_journal_by_name(
self,
journal_name: String,
) -> Result<Option<domain_models::Journal>> {
let journal = self.repository.get_by_name(&journal_name)?;
Ok(journal)
}
}