use sellapp::Client;
use sellapp::resources::products::{CreateParams, GetParams, UpdateParams};
pub async fn catalog_workflow(client: &Client) -> Result<i64, Box<dyn std::error::Error>> {
let body = serde_json::from_value(serde_json::json!({
"title": "Design kit", "description": "Templates for your next project.", "visibility": "HIDDEN"
}))?;
let created = client.products().create(CreateParams::new(body)).await?;
let product = client
.products()
.get(&created.data.id.to_string(), GetParams::default())
.await?;
let update = serde_json::from_value(serde_json::json!({"title": "Design kit revised"}))?;
let updated = client
.products()
.update(&product.data.id.to_string(), UpdateParams::new(update))
.await?;
Ok(updated.data.id)
}
pub async fn checkout(client: &Client, order_id: &str) -> Result<i64, Box<dyn std::error::Error>> {
let order = client.orders().get(order_id, Default::default()).await?;
let body = serde_json::from_value(serde_json::json!({}))?;
let result = client
.orders()
.create_checkout(
&order.data.id.to_string(),
sellapp::resources::orders::CreateCheckoutParams::new(body),
)
.await?;
Ok(result.data.id)
}
pub async fn upload(
client: &Client,
product: &str,
variant: &str,
file: Vec<u8>,
) -> Result<i64, Box<dyn std::error::Error>> {
let body = sellapp::models::SdkUploadVariantDeliverableFileRequestMultipartFormData {
file,
folder_id: None,
additional_properties: Default::default(),
};
let uploaded = client
.variant_deliverable_files()
.upload(
product,
variant,
sellapp::resources::variant_deliverable_files::UploadParams::new(body),
)
.await?;
let saved = client
.variant_deliverable_files()
.get(
product,
variant,
&uploaded.data.id.to_string(),
Default::default(),
)
.await?;
Ok(saved.data.id)
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = Client::from_env()?
.with_base_url(std::env::var("SELLAPP_API_BASE_URL")?)
.with_max_retries(0);
println!("{}", catalog_workflow(&client).await?);
Ok(())
}