devjournal 0.1.0

A dev first cli journaling tool
Documentation
use crate::domain as domain_models;
use crate::repositories::repository::Repository;
use anyhow::Result;
use uuid::Uuid;

/// Service for handling Entry operations
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)
    }
}