use model::{AccessTokenString, RefreshTokenString}; use seed::fetch::{Header, Method, Request}; use crate::api::perform; use crate::NetRes; pub async fn config() -> NetRes { perform(Request::new("/config").method(Method::Get)).await } pub async fn fetch_products() -> NetRes { perform(Request::new("/api/v1/products").method(Method::Get)).await } pub async fn fetch_product(product_id: model::ProductId) -> NetRes { perform(Request::new(format!("/api/v1/product/{}", product_id)).method(Method::Get)).await } pub async fn fetch_me(access_token: AccessTokenString) -> NetRes { perform( Request::new("/api/v1/me") .header(Header::bearer(access_token.as_str())) .method(Method::Get), ) .await } pub async fn sign_in(input: model::api::SignInInput) -> NetRes { perform( Request::new("/api/v1/sign-in") .method(Method::Post) .json(&input) .map_err(crate::api::NetRes::Http)?, ) .await } pub async fn verify_token(access_token: AccessTokenString) -> NetRes { perform( Request::new("/api/v1/token/verify") .method(Method::Post) .header(Header::bearer(access_token.as_str())), ) .await } pub async fn refresh_token(access_token: RefreshTokenString) -> NetRes { perform( Request::new("/api/v1/token/refresh") .method(Method::Post) .header(Header::bearer(access_token.as_str())), ) .await } pub async fn sign_up(input: model::api::CreateAccountInput) -> NetRes { perform( Request::new("/api/v1/register") .method(Method::Post) .json(&input) .map_err(NetRes::Http)?, ) .await } pub async fn update_cart_item( access_token: &AccessTokenString, product_id: model::ProductId, quantity: model::Quantity, quantity_unit: model::QuantityUnit, ) -> NetRes { let input = model::api::UpdateItemInput { product_id, quantity, quantity_unit, }; perform( Request::new("/api/v1/shopping-cart-item") .method(Method::Put) .header(Header::bearer(access_token.as_str())) .json(&input) .map_err(NetRes::Http)?, ) .await } pub async fn update_cart( access_token: AccessTokenString, items: Vec, notes: String, payment_method: Option, ) -> NetRes { let input = model::api::UpdateCartInput { notes, items: items .into_iter() .map( |crate::shopping_cart::Item { product_id, quantity, quantity_unit, }| model::api::UpdateItemInput { product_id, quantity, quantity_unit, }, ) .collect(), payment_method, }; perform( Request::new("/api/v1/shopping-cart") .method(Method::Put) .header(Header::bearer(access_token.as_str())) .json(&input) .map_err(NetRes::Http)?, ) .await } pub async fn place_order(access_token: AccessTokenString) -> NetRes { let input = model::api::CreateOrderInput { email: "".to_string(), phone: "".to_string(), first_name: "".to_string(), last_name: "".to_string(), language: "".to_string(), charge_client: false, currency: "".to_string(), address: None, }; perform( Request::new("/api/v1/order") .method(Method::Post) .header(Header::bearer(access_token.as_str())) .json(&input) .map_err(NetRes::Http)?, ) .await }