bazzar/api/src/actors/database.rs

71 lines
1.6 KiB
Rust
Raw Normal View History

pub use account_orders::*;
2022-04-14 21:40:26 +02:00
pub use accounts::*;
2022-04-18 22:07:52 +02:00
use actix::{Actor, Context};
pub use order_items::*;
2022-04-14 21:40:26 +02:00
pub use products::*;
2022-04-16 12:48:38 +02:00
pub use shopping_cart_items::*;
2022-04-16 09:30:11 +02:00
pub use shopping_carts::*;
2022-04-18 22:07:52 +02:00
use sqlx::PgPool;
pub use stocks::*;
2022-04-18 22:07:52 +02:00
pub use tokens::*;
2022-04-14 21:40:26 +02:00
2022-04-16 18:57:37 +02:00
pub mod account_orders;
pub mod accounts;
pub mod order_items;
pub mod products;
pub mod shopping_cart_items;
pub mod shopping_carts;
pub mod stocks;
2022-04-18 22:07:52 +02:00
pub mod tokens;
2022-04-14 21:40:26 +02:00
#[derive(Debug, thiserror::Error)]
pub enum Error {
#[error("Failed to connect to database. {0:?}")]
2022-04-18 22:07:52 +02:00
Connect(#[from] sqlx::Error),
#[error("{0}")]
Account(#[from] accounts::Error),
2022-04-14 21:40:26 +02:00
#[error("{0}")]
2022-04-18 22:07:52 +02:00
AccountOrder(#[from] account_orders::Error),
2022-04-14 21:40:26 +02:00
#[error("{0}")]
2022-04-18 22:07:52 +02:00
Product(#[from] products::Error),
#[error("{0}")]
2022-04-18 22:07:52 +02:00
Stock(#[from] stocks::Error),
#[error("{0}")]
2022-04-18 22:07:52 +02:00
OrderItem(#[from] order_items::Error),
#[error("{0}")]
2022-04-18 22:07:52 +02:00
ShoppingCart(#[from] shopping_carts::Error),
2022-04-16 09:30:11 +02:00
#[error("{0}")]
2022-04-18 22:07:52 +02:00
ShoppingCartItem(#[from] shopping_cart_items::Error),
2022-04-16 12:48:38 +02:00
#[error("{0}")]
2022-04-18 22:07:52 +02:00
Token(#[from] tokens::Error),
2022-04-14 21:40:26 +02:00
}
pub type Result<T> = std::result::Result<T, Error>;
pub struct Database {
pool: PgPool,
}
impl Clone for Database {
fn clone(&self) -> Self {
2022-04-18 22:07:52 +02:00
Self {
pool: self.pool.clone(),
}
2022-04-14 21:40:26 +02:00
}
}
impl Database {
pub(crate) async fn build(url: &str) -> Result<Self> {
let pool = sqlx::PgPool::connect(url).await.map_err(Error::Connect)?;
Ok(Database { pool })
}
pub fn pool(&self) -> &PgPool {
&self.pool
}
}
impl Actor for Database {
type Context = Context<Self>;
}