mmex_lib 0.1.2-beta.1

Library for interacting with Money Manager EX data and logic
Documentation
use crate::domain::stocks::{Stock, StockError, StockId, StockRepository};
use crate::infrastructure::stocks_repository::SqlStockRepository;
use rusqlite::Connection;

pub struct StockService<'a> {
    conn: &'a Connection,
}

impl<'a> StockService<'a> {
    pub fn new(conn: &'a Connection) -> Self {
        Self { conn }
    }

    pub fn get_all_stocks(&self) -> Result<Vec<Stock>, StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.find_all()
    }

    pub fn get_stock_by_id(&self, id: StockId) -> Result<Option<Stock>, StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.find_by_id(id)
    }

    pub fn create_stock(&self, stock: &Stock) -> Result<Stock, StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.insert(stock)
    }

    pub fn update_stock(&self, stock: &Stock) -> Result<(), StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.update(stock)
    }

    pub fn update_stock_partial(
        &self,
        id: StockId,
        update: crate::domain::stocks::StockUpdate,
    ) -> Result<(), StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.update_partial(id, update)
    }

    pub fn delete_stock(&self, id: StockId) -> Result<(), StockError> {
        let repo = SqlStockRepository::new(self.conn);
        repo.delete(id)
    }
}