Change Output to result
This commit is contained in:
parent
a3dd9b85d8
commit
b70a464afe
@ -13,11 +13,7 @@ pub async fn me(account_id: model::AccountId, db: Database) -> me::Output {
|
|||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return me::Output {
|
return Err(Error::Account);
|
||||||
account: None,
|
|
||||||
addresses: None,
|
|
||||||
error: Some(Error::Account),
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -28,10 +24,7 @@ pub async fn me(account_id: model::AccountId, db: Database) -> me::Output {
|
|||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
|
|
||||||
return me::Output {
|
return Err(Error::Account);
|
||||||
error: Some(Error::Account),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let res = AccountAddresses { account_id }.run(&mut t).await;
|
let res = AccountAddresses { account_id }.run(&mut t).await;
|
||||||
@ -41,19 +34,12 @@ pub async fn me(account_id: model::AccountId, db: Database) -> me::Output {
|
|||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
|
|
||||||
return me::Output {
|
return Err(Error::Addresses);
|
||||||
error: Some(Error::Addresses),
|
|
||||||
..Default::default()
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
t.commit().await.ok();
|
t.commit().await.ok();
|
||||||
|
|
||||||
me::Output {
|
Ok(me::Details { account, addresses })
|
||||||
account: Some(account),
|
|
||||||
addresses: Some(addresses),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn create_account(
|
pub async fn create_account(
|
||||||
|
@ -49,15 +49,9 @@ impl Accounts for AccountsServer {
|
|||||||
match res {
|
match res {
|
||||||
Ok(account) => {
|
Ok(account) => {
|
||||||
self.mqtt_client.emit_account_created(&account).await;
|
self.mqtt_client.emit_account_created(&account).await;
|
||||||
register::Output {
|
Ok(register::Details { account })
|
||||||
account: Some(account),
|
|
||||||
error: None,
|
|
||||||
}
|
}
|
||||||
}
|
Err(_e) => Err(Error::Account),
|
||||||
Err(_e) => register::Output {
|
|
||||||
account: None,
|
|
||||||
error: Some(Error::Account),
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -161,6 +161,7 @@ async fn create_account(opts: CreateAccountOpts) -> Result<()> {
|
|||||||
},
|
},
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
|
.unwrap()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -214,7 +215,7 @@ async fn reindex(opts: ReIndexOpts) -> Result<()> {
|
|||||||
tracing::info!("{:?}", products);
|
tracing::info!("{:?}", products);
|
||||||
|
|
||||||
for product in products {
|
for product in products {
|
||||||
if let Ok(res) = search
|
if let Ok(Err(e)) = search
|
||||||
.create_index(
|
.create_index(
|
||||||
tarpc::context::current(),
|
tarpc::context::current(),
|
||||||
channels::search::create_index::Input::new(
|
channels::search::create_index::Input::new(
|
||||||
@ -232,12 +233,10 @@ async fn reindex(opts: ReIndexOpts) -> Result<()> {
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
if let Some(error) = res.error {
|
tracing::error!("{}", e);
|
||||||
tracing::error!("{}", error);
|
|
||||||
return Ok(());
|
return Ok(());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
tracing::info!("Success!");
|
tracing::info!("Success!");
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
@ -115,19 +115,20 @@ async fn update_cart_item(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(res) => res.item,
|
Ok(Ok(res)) => res.item,
|
||||||
|
Ok(Err(e)) => {
|
||||||
|
tracing::error!("{}", e);
|
||||||
|
return Err(routes::Error::CriticalFailure);
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Err(routes::Error::CriticalFailure);
|
return Err(routes::Error::CriticalFailure);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
match item {
|
Ok(Json(api::UpdateItemOutput {
|
||||||
Some(item) => Ok(Json(api::UpdateItemOutput {
|
|
||||||
shopping_cart_item: item.into(),
|
shopping_cart_item: item.into(),
|
||||||
})),
|
}))
|
||||||
None => Err(routes::Error::Public(super::Error::ModifyItem.into())),
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[put("/shopping-cart")]
|
#[put("/shopping-cart")]
|
||||||
@ -158,7 +159,7 @@ async fn update_cart(
|
|||||||
.collect()
|
.collect()
|
||||||
};
|
};
|
||||||
|
|
||||||
use channels::carts::modify_cart::{Input, Output};
|
use channels::carts::modify_cart::{Details, Input};
|
||||||
let res = {
|
let res = {
|
||||||
match cart
|
match cart
|
||||||
.modify_cart(
|
.modify_cart(
|
||||||
@ -172,17 +173,11 @@ async fn update_cart(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(Output {
|
Ok(Ok(Details { cart })) => cart,
|
||||||
cart: Some(cart), ..
|
Ok(Err(e)) => {
|
||||||
}) => cart,
|
|
||||||
Ok(Output { error: Some(e), .. }) => {
|
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
||||||
}
|
}
|
||||||
Ok(out) => {
|
|
||||||
tracing::error!("invalid output {:?}", out);
|
|
||||||
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
|
||||||
}
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
||||||
@ -208,7 +203,7 @@ async fn delete_cart_item(
|
|||||||
let token = credentials.require_user(tm.into_inner()).await?;
|
let token = credentials.require_user(tm.into_inner()).await?;
|
||||||
|
|
||||||
let sc = {
|
let sc = {
|
||||||
use channels::carts::active_shopping_cart::{Input, Output};
|
use channels::carts::active_shopping_cart::{Details, Input};
|
||||||
match cart
|
match cart
|
||||||
.active_shopping_cart(
|
.active_shopping_cart(
|
||||||
tarpc::context::current(),
|
tarpc::context::current(),
|
||||||
@ -218,17 +213,11 @@ async fn delete_cart_item(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(Output {
|
Ok(Ok(Details { cart })) => cart,
|
||||||
cart: Some(cart), ..
|
Ok(Err(e)) => {
|
||||||
}) => cart,
|
|
||||||
Ok(Output { error: Some(e), .. }) => {
|
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
||||||
}
|
}
|
||||||
Ok(out) => {
|
|
||||||
tracing::error!("invalid output {:?}", out);
|
|
||||||
return Err(routes::Error::Public(super::Error::ModifyItem.into()));
|
|
||||||
}
|
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{e}");
|
tracing::error!("{e}");
|
||||||
return Ok(
|
return Ok(
|
||||||
@ -250,7 +239,11 @@ async fn delete_cart_item(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(_) => Ok(HttpResponse::Ok().json(api::DeleteItemOutput { success: true })),
|
Ok(Ok(_)) => Ok(HttpResponse::Ok().json(api::DeleteItemOutput { success: true })),
|
||||||
|
Ok(Err(e)) => {
|
||||||
|
tracing::error!("{e:?}");
|
||||||
|
Err(routes::Error::Public(PublicError::DatabaseConnection))
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{e:?}");
|
tracing::error!("{e:?}");
|
||||||
Err(routes::Error::Public(PublicError::DatabaseConnection))
|
Err(routes::Error::Public(PublicError::DatabaseConnection))
|
||||||
@ -277,7 +270,11 @@ pub(crate) async fn me(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(me) => Ok(Json((me.account.unwrap(), me.addresses.unwrap()).into())),
|
Ok(Ok(me)) => Ok(Json((me.account, me.addresses).into())),
|
||||||
|
Ok(Err(e)) => {
|
||||||
|
tracing::error!("{}", e);
|
||||||
|
Err(routes::Error::CriticalFailure)
|
||||||
|
}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
Err(routes::Error::CriticalFailure)
|
Err(routes::Error::CriticalFailure)
|
||||||
|
@ -33,9 +33,7 @@ async fn search(
|
|||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
{
|
{
|
||||||
Ok(channels::search::search::Output {
|
Ok(Ok(channels::search::search::Details { found })) => found
|
||||||
found: Some(res), ..
|
|
||||||
}) => res
|
|
||||||
.into_iter()
|
.into_iter()
|
||||||
.filter_map(|s| {
|
.filter_map(|s| {
|
||||||
s.parse::<model::RecordId>()
|
s.parse::<model::RecordId>()
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
use channels::carts::modify_cart::CartDetails;
|
use channels::carts::{self, active_shopping_cart, modify_item, Error};
|
||||||
use channels::carts::{self, Error};
|
use model::ShoppingCartItem;
|
||||||
|
|
||||||
use crate::db::*;
|
use crate::db::*;
|
||||||
|
|
||||||
@ -11,7 +11,7 @@ macro_rules! begin_t {
|
|||||||
Ok(t) => t,
|
Ok(t) => t,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::InternalServerError);
|
return Err(Error::InternalServerError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -21,7 +21,7 @@ macro_rules! end_t {
|
|||||||
($t: ident, $res: expr) => {
|
($t: ident, $res: expr) => {
|
||||||
if let Err(e) = $t.commit().await {
|
if let Err(e) = $t.commit().await {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
Output::error(Error::InternalServerError)
|
Err(Error::InternalServerError)
|
||||||
} else {
|
} else {
|
||||||
$res
|
$res
|
||||||
}
|
}
|
||||||
@ -42,7 +42,7 @@ pub async fn modify_item(
|
|||||||
if let Err(e) = dbm.run(&mut t).await {
|
if let Err(e) = dbm.run(&mut t).await {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
return Output::error(Error::InternalServerError);
|
return Err(Error::InternalServerError);
|
||||||
}
|
}
|
||||||
|
|
||||||
let dbm = AccountShoppingCarts {
|
let dbm = AccountShoppingCarts {
|
||||||
@ -53,11 +53,11 @@ pub async fn modify_item(
|
|||||||
Ok(carts) => carts,
|
Ok(carts) => carts,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::NoCarts);
|
return Err(Error::NoCarts);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let cart = if carts.is_empty() {
|
let cart = if carts.is_empty() {
|
||||||
return Output::error(Error::NoCarts);
|
return Err(Error::NoCarts);
|
||||||
} else {
|
} else {
|
||||||
carts.remove(0)
|
carts.remove(0)
|
||||||
};
|
};
|
||||||
@ -69,7 +69,7 @@ pub async fn modify_item(
|
|||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::NoActiveCart);
|
return Err(Error::NoActiveCart);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -77,12 +77,12 @@ pub async fn modify_item(
|
|||||||
Some(item) if **item.quantity == 0 => {
|
Some(item) if **item.quantity == 0 => {
|
||||||
let dbm = DeleteShoppingCartItem { id: item.id };
|
let dbm = DeleteShoppingCartItem { id: item.id };
|
||||||
match dbm.run(&mut t).await {
|
match dbm.run(&mut t).await {
|
||||||
Ok(Some(res)) => Output::item(res),
|
Ok(Some(res)) => modify_item::Details { item: res },
|
||||||
Ok(None) => Output::default(),
|
Ok(None) => return Err(Error::DeleteItem(item.id)),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
return Output::error(Error::DeleteItem(item.id));
|
return Err(Error::DeleteItem(item.id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -95,11 +95,11 @@ pub async fn modify_item(
|
|||||||
quantity_unit: msg.quantity_unit,
|
quantity_unit: msg.quantity_unit,
|
||||||
};
|
};
|
||||||
match dbm.run(&mut t).await {
|
match dbm.run(&mut t).await {
|
||||||
Ok(res) => Output::item(res),
|
Ok(res) => modify_item::Details { item: res },
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
return Output::error(Error::ModifyItem(item.id));
|
return Err(Error::ModifyItem(item.id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -111,24 +111,25 @@ pub async fn modify_item(
|
|||||||
quantity_unit: msg.quantity_unit,
|
quantity_unit: msg.quantity_unit,
|
||||||
};
|
};
|
||||||
match dbm.run(&mut t).await {
|
match dbm.run(&mut t).await {
|
||||||
Ok(res) => Output::item(res),
|
Ok(res) => modify_item::Details { item: res },
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
return Output::error(Error::CreateItem);
|
return Err(Error::CreateItem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
end_t!(t, res)
|
end_t!(t, Ok(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn remove_product(
|
pub async fn remove_product(
|
||||||
msg: carts::remove_product::Input,
|
msg: carts::remove_product::Input,
|
||||||
db: Database,
|
db: Database,
|
||||||
) -> carts::remove_product::Output {
|
) -> carts::remove_product::Output {
|
||||||
use carts::remove_product::Output;
|
use carts::remove_product::Details;
|
||||||
|
|
||||||
let dbm = RemoveCartItem {
|
let dbm = RemoveCartItem {
|
||||||
shopping_cart_id: msg.shopping_cart_id,
|
shopping_cart_id: msg.shopping_cart_id,
|
||||||
shopping_cart_item_id: Some(msg.shopping_cart_item_id),
|
shopping_cart_item_id: Some(msg.shopping_cart_item_id),
|
||||||
@ -137,21 +138,21 @@ pub async fn remove_product(
|
|||||||
let mut t = begin_t!(db);
|
let mut t = begin_t!(db);
|
||||||
|
|
||||||
let res = match dbm.run(&mut t).await {
|
let res = match dbm.run(&mut t).await {
|
||||||
Ok(Some(res)) => Output::item(res),
|
Ok(Some(res)) => Details { item: res },
|
||||||
Ok(None) => Output::default(),
|
Ok(None) => return Err(Error::DeleteItem(msg.shopping_cart_item_id)),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
Output::error(Error::DeleteItem(msg.shopping_cart_item_id))
|
return Err(Error::DeleteItem(msg.shopping_cart_item_id));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
end_t!(t, res)
|
end_t!(t, Ok(res))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub async fn modify_cart(
|
pub async fn modify_cart(
|
||||||
msg: carts::modify_cart::Input,
|
msg: carts::modify_cart::Input,
|
||||||
db: Database,
|
db: Database,
|
||||||
) -> carts::modify_cart::Output {
|
) -> carts::modify_cart::Output {
|
||||||
use carts::modify_cart::Output;
|
use carts::modify_cart::{CartDetails, Details};
|
||||||
|
|
||||||
tracing::debug!("{:?}", msg);
|
tracing::debug!("{:?}", msg);
|
||||||
|
|
||||||
@ -164,7 +165,7 @@ pub async fn modify_cart(
|
|||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::InternalServerError);
|
return Err(Error::InternalServerError);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
let dbm = UpdateShoppingCart {
|
let dbm = UpdateShoppingCart {
|
||||||
@ -182,7 +183,7 @@ pub async fn modify_cart(
|
|||||||
Ok(res) => res,
|
Ok(res) => res,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::ModifyCart(cart.id));
|
return Err(Error::ModifyCart(cart.id));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -201,7 +202,7 @@ pub async fn modify_cart(
|
|||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::LoadItems(cart.id));
|
return Err(Error::LoadItems(cart.id));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -218,7 +219,7 @@ pub async fn modify_cart(
|
|||||||
Ok(_) => {}
|
Ok(_) => {}
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
return Output::error(Error::DeleteItem(item.id));
|
return Err(Error::DeleteItem(item.id));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -226,25 +227,19 @@ pub async fn modify_cart(
|
|||||||
let mut out = Vec::with_capacity(msg.items.len());
|
let mut out = Vec::with_capacity(msg.items.len());
|
||||||
|
|
||||||
for item in msg.items {
|
for item in msg.items {
|
||||||
let res = modify_item(item, db.clone()).await;
|
let res = modify_item(item, db.clone()).await?;
|
||||||
if let carts::modify_item::Output {
|
out.push(res.item);
|
||||||
error: Some(error), ..
|
|
||||||
} = &res
|
|
||||||
{
|
|
||||||
return Output::error(error.clone());
|
|
||||||
}
|
|
||||||
if let Some(item) = res.item {
|
|
||||||
out.push(item);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
end_t!(
|
end_t!(
|
||||||
t,
|
t,
|
||||||
Output::cart(CartDetails {
|
Ok(Details {
|
||||||
|
cart: CartDetails {
|
||||||
cart_id: cart.id,
|
cart_id: cart.id,
|
||||||
items: out,
|
items: out,
|
||||||
checkout_notes: cart.checkout_notes.unwrap_or_default(),
|
checkout_notes: cart.checkout_notes.unwrap_or_default(),
|
||||||
payment_method: cart.payment_method,
|
payment_method: cart.payment_method,
|
||||||
|
}
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@ -259,7 +254,7 @@ pub async fn active_shopping_cart(
|
|||||||
|
|
||||||
let mut t = begin_t!(db);
|
let mut t = begin_t!(db);
|
||||||
|
|
||||||
let dbm = crate::db::EnsureActiveShoppingCart {
|
let dbm = EnsureActiveShoppingCart {
|
||||||
buyer_id: input.buyer_id,
|
buyer_id: input.buyer_id,
|
||||||
};
|
};
|
||||||
let cart = match dbm.run(&mut t).await {
|
let cart = match dbm.run(&mut t).await {
|
||||||
@ -267,9 +262,9 @@ pub async fn active_shopping_cart(
|
|||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{}", e);
|
tracing::error!("{}", e);
|
||||||
t.rollback().await.ok();
|
t.rollback().await.ok();
|
||||||
return Output::error(Error::NoActiveCart);
|
return Err(Error::NoActiveCart);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
end_t!(t, Output::cart(cart))
|
end_t!(t, Ok(active_shopping_cart::Details { cart }))
|
||||||
}
|
}
|
||||||
|
@ -81,25 +81,29 @@ pub mod register {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub account: Option<model::FullAccount>,
|
pub account: model::FullAccount,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod me {
|
pub mod me {
|
||||||
|
use crate::accounts::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub account_id: model::AccountId,
|
pub account_id: model::AccountId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub account: Option<model::FullAccount>,
|
pub account: model::FullAccount,
|
||||||
pub addresses: Option<Vec<model::AccountAddress>>,
|
pub addresses: Vec<model::AccountAddress>,
|
||||||
pub error: Option<super::Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AsyncClient {
|
impl AsyncClient {
|
||||||
|
@ -31,27 +31,12 @@ pub mod remove_product {
|
|||||||
pub shopping_cart_item_id: model::ShoppingCartItemId,
|
pub shopping_cart_item_id: model::ShoppingCartItemId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub item: Option<model::ShoppingCartItem>,
|
pub item: model::ShoppingCartItem,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn item(item: model::ShoppingCartItem) -> Self {
|
|
||||||
Self {
|
|
||||||
item: Some(item),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod modify_item {
|
pub mod modify_item {
|
||||||
@ -65,27 +50,12 @@ pub mod modify_item {
|
|||||||
pub quantity_unit: model::QuantityUnit,
|
pub quantity_unit: model::QuantityUnit,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub item: Option<model::ShoppingCartItem>,
|
pub item: model::ShoppingCartItem,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn item(item: model::ShoppingCartItem) -> Self {
|
|
||||||
Self {
|
|
||||||
item: Some(item),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod modify_cart {
|
pub mod modify_cart {
|
||||||
@ -107,27 +77,12 @@ pub mod modify_cart {
|
|||||||
pub payment_method: model::PaymentMethod,
|
pub payment_method: model::PaymentMethod,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub cart: Option<CartDetails>,
|
pub cart: CartDetails,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn cart(cart: CartDetails) -> Self {
|
|
||||||
Self {
|
|
||||||
cart: Some(cart),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod active_shopping_cart {
|
pub mod active_shopping_cart {
|
||||||
@ -138,27 +93,12 @@ pub mod active_shopping_cart {
|
|||||||
pub buyer_id: model::AccountId,
|
pub buyer_id: model::AccountId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub error: Option<Error>,
|
pub cart: model::ShoppingCart,
|
||||||
pub cart: Option<model::ShoppingCart>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn cart(cart: model::ShoppingCart) -> Self {
|
|
||||||
Self {
|
|
||||||
cart: Some(cart),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod rpc {
|
pub mod rpc {
|
||||||
|
@ -37,27 +37,12 @@ pub mod search {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub found: Option<Vec<String>>,
|
pub found: Vec<String>,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn found(found: Vec<String>) -> Self {
|
|
||||||
Self {
|
|
||||||
found: Some(found),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod suggest {
|
pub mod suggest {
|
||||||
@ -84,27 +69,12 @@ pub mod suggest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub found: Option<Vec<String>>,
|
pub found: Vec<String>,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn found(found: Vec<String>) -> Self {
|
|
||||||
Self {
|
|
||||||
found: Some(found),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod create_index {
|
pub mod create_index {
|
||||||
@ -184,26 +154,11 @@ pub mod create_index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub found: Option<()>,
|
pub found: Option<()>,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Output {
|
pub type Output = Result<Details, Error>;
|
||||||
pub fn ok() -> Self {
|
|
||||||
Self {
|
|
||||||
found: Some(()),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod delete_index {
|
pub mod delete_index {
|
||||||
@ -234,26 +189,10 @@ pub mod delete_index {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, Default, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub found: Option<()>,
|
pub found: Option<()>,
|
||||||
pub error: Option<Error>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Output {
|
|
||||||
pub fn ok() -> Self {
|
|
||||||
Self {
|
|
||||||
found: Some(()),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn error(error: Error) -> Self {
|
|
||||||
Self {
|
|
||||||
error: Some(error),
|
|
||||||
..Default::default()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod rpc {
|
pub mod rpc {
|
||||||
|
@ -1,27 +1,35 @@
|
|||||||
pub mod detailed_product {
|
pub mod detailed_product {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Output2 {
|
||||||
pub product: model::Product,
|
pub product: model::Product,
|
||||||
pub stocks: Vec<Stock>,
|
pub stocks: Vec<Stock>,
|
||||||
pub photos: Vec<Photo>,
|
pub photos: Vec<Photo>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Output2, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod detailed_products {
|
pub mod detailed_products {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {}
|
pub struct Input {}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub products: Vec<DetailedProduct>,
|
pub products: Vec<DetailedProduct>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,9 @@ pub use product_variant::*;
|
|||||||
|
|
||||||
pub static CLIENT_NAME: &str = "stocks";
|
pub static CLIENT_NAME: &str = "stocks";
|
||||||
|
|
||||||
|
#[derive(Debug, thiserror::Error, serde::Serialize, serde::Deserialize)]
|
||||||
|
pub enum Error {}
|
||||||
|
|
||||||
pub mod rpc {
|
pub mod rpc {
|
||||||
use config::SharedAppConfig;
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
pub mod create_product {
|
pub mod create_product {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct ProductInput {
|
pub struct ProductInput {
|
||||||
pub name: ProductName,
|
pub name: ProductName,
|
||||||
@ -25,11 +27,13 @@ pub mod create_product {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product: model::Product,
|
pub product: model::Product,
|
||||||
pub stocks: Vec<Stock>,
|
pub stocks: Vec<Stock>,
|
||||||
pub photos: Vec<Photo>,
|
pub photos: Vec<Photo>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod update_product {
|
pub mod update_product {
|
||||||
@ -51,13 +55,17 @@ pub mod update_product {
|
|||||||
pub mod delete_product {
|
pub mod delete_product {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
pub mod add_product_photo {
|
pub mod add_product_photo {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub local_path: LocalPath,
|
pub local_path: LocalPath,
|
||||||
@ -9,18 +11,22 @@ pub mod add_product_photo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub photo_id: ProductPhotoId,
|
pub photo_id: ProductPhotoId,
|
||||||
pub product_variant_id: ProductVariantId,
|
pub product_variant_id: ProductVariantId,
|
||||||
pub local_path: LocalPath,
|
pub local_path: LocalPath,
|
||||||
pub file_name: FileName,
|
pub file_name: FileName,
|
||||||
pub unique_name: UniqueName,
|
pub unique_name: UniqueName,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod delete_product_photo {
|
pub mod delete_product_photo {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub photo_id: ProductPhotoId,
|
pub photo_id: ProductPhotoId,
|
||||||
@ -28,8 +34,10 @@ pub mod delete_product_photo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub photo_id: ProductPhotoId,
|
pub photo_id: ProductPhotoId,
|
||||||
pub product_variant_id: ProductVariantId,
|
pub product_variant_id: ProductVariantId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
pub mod create_product_stock {
|
pub mod create_product_stock {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub product_variant_id: ProductVariantId,
|
pub product_variant_id: ProductVariantId,
|
||||||
@ -9,14 +11,18 @@ pub mod create_product_stock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_stock: Stock,
|
pub product_stock: Stock,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod update_product_stock {
|
pub mod update_product_stock {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub id: StockId,
|
pub id: StockId,
|
||||||
@ -26,7 +32,9 @@ pub mod update_product_stock {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_stock: Stock,
|
pub product_stock: Stock,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
pub mod create_product_variant {
|
pub mod create_product_variant {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
@ -11,14 +13,18 @@ pub mod create_product_variant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_variant: ProductVariant,
|
pub product_variant: ProductVariant,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod update_product_variant {
|
pub mod update_product_variant {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub id: ProductVariantId,
|
pub id: ProductVariantId,
|
||||||
@ -30,14 +36,18 @@ pub mod update_product_variant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_variant: ProductVariant,
|
pub product_variant: ProductVariant,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub mod delete_product_variant {
|
pub mod delete_product_variant {
|
||||||
use model::v2::*;
|
use model::v2::*;
|
||||||
|
|
||||||
|
use crate::stocks::Error;
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Input {
|
pub struct Input {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
@ -45,8 +55,10 @@ pub mod delete_product_variant {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
#[derive(Debug, serde::Serialize, serde::Deserialize)]
|
||||||
pub struct Output {
|
pub struct Details {
|
||||||
pub product_id: ProductId,
|
pub product_id: ProductId,
|
||||||
pub product_variant_id: ProductVariantId,
|
pub product_variant_id: ProductVariantId,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub type Output = Result<Details, Error>;
|
||||||
}
|
}
|
||||||
|
@ -900,6 +900,8 @@ impl ProductCategory {
|
|||||||
|
|
||||||
pub mod v2 {
|
pub mod v2 {
|
||||||
use derive_more::{Deref, Display, From};
|
use derive_more::{Deref, Display, From};
|
||||||
|
#[cfg(feature = "dummy")]
|
||||||
|
use fake::Fake;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
pub use crate::{
|
pub use crate::{
|
||||||
|
@ -14,14 +14,14 @@ pub async fn search(msg: search::Input, ctx: Context, _config: SharedAppConfig)
|
|||||||
} = msg;
|
} = msg;
|
||||||
let query = QueryRequest::new(Dest::col_buc(collection, bucket), query).lang(lang.0);
|
let query = QueryRequest::new(Dest::col_buc(collection, bucket), query).lang(lang.0);
|
||||||
match l.query(query) {
|
match l.query(query) {
|
||||||
Ok(res) => search::Output::found(res),
|
Ok(res) => Ok(search::Details { found: res }),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{e:?}");
|
tracing::error!("{e:?}");
|
||||||
search::Output::error(Error::QueryFailed)
|
Err(Error::QueryFailed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
search::Output::found(vec![])
|
Ok(search::Details { found: vec![] })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,14 +38,14 @@ pub async fn suggest(
|
|||||||
} = msg;
|
} = msg;
|
||||||
let query = SuggestRequest::new(Dest::col_buc(collection, bucket), query).limit(10);
|
let query = SuggestRequest::new(Dest::col_buc(collection, bucket), query).limit(10);
|
||||||
match l.suggest(query) {
|
match l.suggest(query) {
|
||||||
Ok(res) => suggest::Output::found(res),
|
Ok(res) => Ok(suggest::Details { found: res }),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("{e:?}");
|
tracing::error!("{e:?}");
|
||||||
suggest::Output::error(Error::QueryFailed)
|
Err(Error::QueryFailed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
suggest::Output::found(vec![])
|
Ok(suggest::Details { found: vec![] })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,14 +62,14 @@ pub async fn create_index(
|
|||||||
)
|
)
|
||||||
.lang(msg.lang.0),
|
.lang(msg.lang.0),
|
||||||
) {
|
) {
|
||||||
Ok(_) => create_index::Output::ok(),
|
Ok(_) => Ok(create_index::Details { found: Some(()) }),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("push {e:?}");
|
tracing::error!("push {e:?}");
|
||||||
create_index::Output::error(Error::CantCreate)
|
Err(Error::CantCreate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
create_index::Output::ok()
|
Ok(create_index::Details { found: None })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,14 +83,14 @@ pub async fn delete_index(
|
|||||||
ObjDest::new(Dest::col_buc(msg.collection, msg.bucket), &msg.key),
|
ObjDest::new(Dest::col_buc(msg.collection, msg.bucket), &msg.key),
|
||||||
&msg.value,
|
&msg.value,
|
||||||
)) {
|
)) {
|
||||||
Ok(_) => delete_index::Output::ok(),
|
Ok(_) => Ok(delete_index::Details { found: Some(()) }),
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
tracing::error!("pop {e:?}");
|
tracing::error!("pop {e:?}");
|
||||||
delete_index::Output::error(Error::CantCreate)
|
Err(Error::CantCreate)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
delete_index::Output::ok()
|
Ok(delete_index::Details { found: None })
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
23
crates/stock_manager/src/actions/load.rs
Normal file
23
crates/stock_manager/src/actions/load.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use channels::stocks::{detailed_product, detailed_products};
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn detailed_product(
|
||||||
|
input: detailed_product::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> detailed_product::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn detailed_products(
|
||||||
|
input: detailed_products::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> detailed_products::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
11
crates/stock_manager/src/actions/mod.rs
Normal file
11
crates/stock_manager/src/actions/mod.rs
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
pub mod load;
|
||||||
|
pub mod product;
|
||||||
|
pub mod product_photo;
|
||||||
|
pub mod product_stock;
|
||||||
|
pub mod product_variant;
|
||||||
|
|
||||||
|
pub use load::*;
|
||||||
|
pub use product::*;
|
||||||
|
pub use product_photo::*;
|
||||||
|
pub use product_stock::*;
|
||||||
|
pub use product_variant::*;
|
32
crates/stock_manager/src/actions/product.rs
Normal file
32
crates/stock_manager/src/actions/product.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
use channels::stocks::{create_product, delete_product, update_product};
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn create_product(
|
||||||
|
input: create_product::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> create_product::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn update_product(
|
||||||
|
input: update_product::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> update_product::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn delete_product(
|
||||||
|
input: delete_product::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> delete_product::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
23
crates/stock_manager/src/actions/product_photo.rs
Normal file
23
crates/stock_manager/src/actions/product_photo.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use channels::stocks::{add_product_photo, delete_product_photo};
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn add_product_photo(
|
||||||
|
input: add_product_photo::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> add_product_photo::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn delete_product_photo(
|
||||||
|
input: delete_product_photo::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> delete_product_photo::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
23
crates/stock_manager/src/actions/product_stock.rs
Normal file
23
crates/stock_manager/src/actions/product_stock.rs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
use channels::stocks::{create_product_stock, update_product_stock};
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn create_product_stock(
|
||||||
|
input: create_product_stock::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> create_product_stock::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn update_product_stock(
|
||||||
|
input: update_product_stock::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> update_product_stock::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
32
crates/stock_manager/src/actions/product_variant.rs
Normal file
32
crates/stock_manager/src/actions/product_variant.rs
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
use channels::stocks::{create_product_variant, delete_product_variant, update_product_variant};
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn create_product_variant(
|
||||||
|
input: create_product_variant::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> create_product_variant::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn update_product_variant(
|
||||||
|
input: update_product_variant::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> update_product_variant::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn delete_product_variant(
|
||||||
|
input: delete_product_variant::Input,
|
||||||
|
db: Database,
|
||||||
|
mqtt: AsyncClient,
|
||||||
|
config: SharedAppConfig,
|
||||||
|
) -> delete_product_variant::Output {
|
||||||
|
todo!()
|
||||||
|
}
|
@ -1,4 +1,6 @@
|
|||||||
use config::SharedAppConfig;
|
use config::SharedAppConfig;
|
||||||
|
use sqlx_core::pool::Pool;
|
||||||
|
use sqlx_core::postgres::Postgres;
|
||||||
|
|
||||||
mod photos;
|
mod photos;
|
||||||
mod product_photos;
|
mod product_photos;
|
||||||
@ -24,5 +26,7 @@ impl Database {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn pool(&self) {}
|
pub fn pool(&self) -> Pool<Postgres> {
|
||||||
|
self.pool.clone()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,23 @@
|
|||||||
|
use config::UpdateConfig;
|
||||||
|
|
||||||
mod actions;
|
mod actions;
|
||||||
mod context;
|
mod context;
|
||||||
mod db;
|
mod db;
|
||||||
mod mqtt;
|
mod mqtt;
|
||||||
mod rpc;
|
mod rpc;
|
||||||
|
|
||||||
|
pub struct Opts {}
|
||||||
|
|
||||||
|
impl UpdateConfig for Opts {}
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {}
|
async fn main() {
|
||||||
|
let opts = Opts {};
|
||||||
|
|
||||||
|
let config = config::default_load(&opts);
|
||||||
|
|
||||||
|
let db = db::Database::build(config.clone()).await;
|
||||||
|
|
||||||
|
let mqtt_client = mqtt::start(config.clone(), db.clone()).await;
|
||||||
|
rpc::start(config, db, mqtt_client).await;
|
||||||
|
}
|
||||||
|
@ -0,0 +1,30 @@
|
|||||||
|
use config::SharedAppConfig;
|
||||||
|
use rumqttc::{Event, Incoming};
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
|
||||||
|
pub async fn start(config: SharedAppConfig, _db: Database) -> channels::AsyncClient {
|
||||||
|
let (client, mut event_loop) = channels::stocks::mqtt::create_client(config);
|
||||||
|
|
||||||
|
let spawn_client = client.clone();
|
||||||
|
tokio::spawn(async move {
|
||||||
|
let _client = spawn_client.clone();
|
||||||
|
loop {
|
||||||
|
let notification = event_loop.poll().await;
|
||||||
|
|
||||||
|
match notification {
|
||||||
|
Ok(Event::Incoming(Incoming::Publish(publish))) => match publish.topic.as_str() {
|
||||||
|
_ => {}
|
||||||
|
},
|
||||||
|
Ok(Event::Incoming(_incoming)) => {}
|
||||||
|
Ok(Event::Outgoing(_outgoing)) => {}
|
||||||
|
Err(e) => {
|
||||||
|
tracing::error!("{}", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// tracing::info!("Mqtt channel closed");
|
||||||
|
});
|
||||||
|
|
||||||
|
client
|
||||||
|
}
|
@ -0,0 +1,135 @@
|
|||||||
|
use channels::stocks::rpc::Stocks;
|
||||||
|
use channels::AsyncClient;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
|
||||||
|
use crate::db::Database;
|
||||||
|
use crate::rpc::rpc::StocksServer;
|
||||||
|
|
||||||
|
pub mod rpc {
|
||||||
|
use channels::stocks::rpc::Stocks;
|
||||||
|
use channels::stocks::*;
|
||||||
|
use config::SharedAppConfig;
|
||||||
|
use tarpc::context;
|
||||||
|
|
||||||
|
use crate::actions;
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
pub struct StocksServer {
|
||||||
|
pub db: crate::db::Database,
|
||||||
|
pub mqtt_client: channels::AsyncClient,
|
||||||
|
pub config: SharedAppConfig,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[tarpc::server]
|
||||||
|
impl Stocks for StocksServer {
|
||||||
|
async fn create_product(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: create_product::Input,
|
||||||
|
) -> create_product::Output {
|
||||||
|
actions::create_product(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn update_product(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: update_product::Input,
|
||||||
|
) -> update_product::Output {
|
||||||
|
actions::update_product(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn delete_product(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: delete_product::Input,
|
||||||
|
) -> delete_product::Output {
|
||||||
|
actions::delete_product(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn create_product_variant(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: create_product_variant::Input,
|
||||||
|
) -> create_product_variant::Output {
|
||||||
|
actions::create_product_variant(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn update_product_variant(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: update_product_variant::Input,
|
||||||
|
) -> update_product_variant::Output {
|
||||||
|
actions::update_product_variant(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn delete_product_variant(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: delete_product_variant::Input,
|
||||||
|
) -> delete_product_variant::Output {
|
||||||
|
actions::delete_product_variant(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn add_product_photo(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: add_product_photo::Input,
|
||||||
|
) -> add_product_photo::Output {
|
||||||
|
actions::add_product_photo(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn delete_product_photo(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: delete_product_photo::Input,
|
||||||
|
) -> delete_product_photo::Output {
|
||||||
|
actions::delete_product_photo(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn create_product_stock(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: create_product_stock::Input,
|
||||||
|
) -> create_product_stock::Output {
|
||||||
|
actions::create_product_stock(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn update_product_stock(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: update_product_stock::Input,
|
||||||
|
) -> update_product_stock::Output {
|
||||||
|
actions::update_product_stock(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn detailed_product(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: detailed_product::Input,
|
||||||
|
) -> detailed_product::Output {
|
||||||
|
actions::detailed_product(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn detailed_products(
|
||||||
|
self,
|
||||||
|
_: context::Context,
|
||||||
|
input: detailed_products::Input,
|
||||||
|
) -> detailed_products::Output {
|
||||||
|
actions::detailed_products(input, self.db, self.mqtt_client, self.config).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn start(config: SharedAppConfig, db: Database, mqtt_client: AsyncClient) {
|
||||||
|
let port = { config.lock().stocks_manager().rpc_port };
|
||||||
|
|
||||||
|
channels::rpc::start("stocks", port, || {
|
||||||
|
StocksServer {
|
||||||
|
db: db.clone(),
|
||||||
|
config: config.clone(),
|
||||||
|
mqtt_client: mqtt_client.clone(),
|
||||||
|
}
|
||||||
|
.serve()
|
||||||
|
})
|
||||||
|
.await;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user