use { crate::entities::{ orm::ticker, ticker::{Entity as Ticker, Model as TickerModel}, }, eyre::Result, sea_orm::{ColumnTrait, DatabaseConnection, DbErr, EntityTrait, IntoActiveModel, QueryFilter}, }; /// ๐ŸŽ ยป service for the `Ticker` entity pub struct Service { conn: DatabaseConnection, } impl Service { /// ๐ŸŽ ยป creates a new `Ticker` service pub async fn new(conn: DatabaseConnection) -> Self { Self { conn } } /// ๐ŸŽ ยป retrieves all tickers from the database pub async fn get_all(&self) -> Result, DbErr> { let tickers = Ticker::find().all(&self.conn).await?; Ok(tickers) } /// ๐ŸŽ ยป get all active pub async fn get_all_active(&self) -> Result, DbErr> { let tickers = Ticker::find().filter(ticker::Column::Active.eq(true)).all(&self.conn).await?; Ok(tickers) } /// ๐ŸŽ ยป retrieves a ticker from the database, given its id pub async fn get(&self, id: String) -> Result, DbErr> { let ticker = Ticker::find_by_id(id).one(&self.conn).await?; Ok(ticker) } /// ๐ŸŽ ยป retrieves a ticker from the database, given its symbol pub async fn get_by_symbol(&self, symbol: String) -> Result, DbErr> { let ticker = Ticker::find().filter(ticker::Column::Symbol.eq(symbol)).one(&self.conn).await?; Ok(ticker) } /// ๐ŸŽ ยป creates a new ticker in the database pub async fn create(&self, market: TickerModel) -> Result { Ticker::insert(market.clone().into_active_model()).exec(&self.conn).await?; Ok(market) } }