Db shopping carts
This commit is contained in:
parent
388bfd634a
commit
160c1f2563
@ -5,12 +5,14 @@ pub use account_orders::*;
|
|||||||
pub use accounts::*;
|
pub use accounts::*;
|
||||||
pub use order_items::*;
|
pub use order_items::*;
|
||||||
pub use products::*;
|
pub use products::*;
|
||||||
|
pub use shopping_carts::*;
|
||||||
pub use stocks::*;
|
pub use stocks::*;
|
||||||
|
|
||||||
mod account_orders;
|
mod account_orders;
|
||||||
mod accounts;
|
mod accounts;
|
||||||
mod order_items;
|
mod order_items;
|
||||||
mod products;
|
mod products;
|
||||||
|
mod shopping_carts;
|
||||||
mod stocks;
|
mod stocks;
|
||||||
|
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
@ -41,6 +43,8 @@ pub enum Error {
|
|||||||
Stock(stocks::Error),
|
Stock(stocks::Error),
|
||||||
#[error("{0}")]
|
#[error("{0}")]
|
||||||
OrderItem(order_items::Error),
|
OrderItem(order_items::Error),
|
||||||
|
#[error("{0}")]
|
||||||
|
ShoppingCart(shopping_carts::Error),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
123
api/src/actors/database/shopping_carts.rs
Normal file
123
api/src/actors/database/shopping_carts.rs
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
use crate::async_handler;
|
||||||
|
use actix::{Handler, ResponseActFuture, WrapFuture};
|
||||||
|
use sqlx::PgPool;
|
||||||
|
|
||||||
|
use crate::database::Database;
|
||||||
|
use crate::model::*;
|
||||||
|
|
||||||
|
use super::Result;
|
||||||
|
|
||||||
|
#[derive(Debug, thiserror::Error)]
|
||||||
|
pub enum Error {
|
||||||
|
#[error("Can't create shopping cart")]
|
||||||
|
CantCreate,
|
||||||
|
#[error("Can't find shopping cart does to lack of identity")]
|
||||||
|
NoIdentity,
|
||||||
|
#[error("Shopping cart does not exists")]
|
||||||
|
NotExists,
|
||||||
|
#[error("Failed to load all shopping carts")]
|
||||||
|
All,
|
||||||
|
#[error("Failed to load account shopping carts")]
|
||||||
|
AccountCarts,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(actix::Message)]
|
||||||
|
#[rtype(result = "Result<Vec<ShoppingCart>>")]
|
||||||
|
pub struct AllShoppingCarts;
|
||||||
|
|
||||||
|
async_handler!(AllShoppingCarts, all_shopping_carts, Vec<ShoppingCart>);
|
||||||
|
|
||||||
|
pub async fn all_shopping_carts(_msg: AllShoppingCarts, pool: PgPool) -> Result<Vec<ShoppingCart>> {
|
||||||
|
sqlx::query_as(
|
||||||
|
r#"
|
||||||
|
SELECT id, buyer_id, payment_method
|
||||||
|
FROM shopping_carts
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.fetch_all(&pool)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
log::error!("{e:?}");
|
||||||
|
super::Error::ShoppingCart(Error::All)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(actix::Message)]
|
||||||
|
#[rtype(result = "Result<Vec<ShoppingCart>>")]
|
||||||
|
pub struct AccountShoppingCarts {
|
||||||
|
pub account_id: AccountId,
|
||||||
|
}
|
||||||
|
|
||||||
|
async_handler!(AccountShoppingCarts, account_shopping_carts, Vec<ShoppingCart>);
|
||||||
|
|
||||||
|
pub async fn account_shopping_carts(
|
||||||
|
msg: AccountShoppingCarts,
|
||||||
|
pool: PgPool,
|
||||||
|
) -> Result<Vec<ShoppingCart>> {
|
||||||
|
sqlx::query_as(
|
||||||
|
r#"
|
||||||
|
SELECT id, buyer_id, payment_method
|
||||||
|
FROM shopping_carts
|
||||||
|
WHERE buyer_id = $1
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.bind(msg.acocunt_id)
|
||||||
|
.fetch_all(&pool)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
log::error!("{e:?}");
|
||||||
|
super::Error::ShoppingCart(Error::AccountCarts)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(actix::Message)]
|
||||||
|
#[rtype(result = "Result<ShoppingCart>")]
|
||||||
|
pub struct CreateShoppingCart {
|
||||||
|
pub buyer_id: AccountId,
|
||||||
|
pub payment_method: PaymentMethod,
|
||||||
|
}
|
||||||
|
|
||||||
|
async_handler!(CreateShoppingCart, create_shopping_cart, ShoppingCart);
|
||||||
|
|
||||||
|
async fn create_shopping_cart(msg: CreateShoppingCart, db: PgPool) -> Result<ShoppingCart> {
|
||||||
|
sqlx::query_as(
|
||||||
|
r#"
|
||||||
|
INSERT INTO shopping_carts (buyer_id, payment_method)
|
||||||
|
VALUES ($1, $2)
|
||||||
|
RETURNING id, buyer_id, payment_method
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.bind(msg.buyer_id)
|
||||||
|
.bind(msg.payment_method)
|
||||||
|
.fetch_one(&db)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
log::error!("{e:?}");
|
||||||
|
super::Error::ShoppingCart(Error::CantCreate)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(actix::Message)]
|
||||||
|
#[rtype(result = "Result<ShoppingCart>")]
|
||||||
|
pub struct FindShoppingCart {
|
||||||
|
pub id: ShoppingCartId,
|
||||||
|
}
|
||||||
|
|
||||||
|
async_handler!(FindShoppingCart, find_shopping_cart, ShoppingCart);
|
||||||
|
|
||||||
|
async fn find_shopping_cart(msg: FindShoppingCart, db: PgPool) -> Result<ShoppingCart> {
|
||||||
|
sqlx::query_as(
|
||||||
|
r#"
|
||||||
|
SELECT id, buyer_id, payment_method
|
||||||
|
FROM shopping_carts
|
||||||
|
WHERE id = $1
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
.bind(msg.id)
|
||||||
|
.fetch_one(&db)
|
||||||
|
.await
|
||||||
|
.map_err(|e| {
|
||||||
|
log::error!("{e:?}");
|
||||||
|
super::Error::ShoppingCart(Error::NotExists)
|
||||||
|
})
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user