0 is out of stock and nothing is available from now on
This commit is contained in:
@@ -97,9 +97,9 @@ async fn add(
|
||||
let mut items = parse_cart(&jar);
|
||||
let add_qty = form.quantity.unwrap_or(1).max(1);
|
||||
if let Some(entry) = items.iter_mut().find(|(id, _)| *id == variant.id) {
|
||||
entry.1 = (entry.1 + add_qty).min(variant.stock);
|
||||
entry.1 = variant.cap(entry.1 + add_qty);
|
||||
} else {
|
||||
items.push((variant.id, add_qty.min(variant.stock)));
|
||||
items.push((variant.id, variant.cap(add_qty)));
|
||||
}
|
||||
items.retain(|(_, qty)| *qty > 0);
|
||||
|
||||
@@ -128,13 +128,14 @@ async fn update(
|
||||
headers: HeaderMap,
|
||||
Form(form): Form<UpdateForm>,
|
||||
) -> Result<Response> {
|
||||
let stock = published_variant(&ctx, form.variant_id)
|
||||
.await?
|
||||
.map(|(v, _)| v.stock)
|
||||
.unwrap_or(0);
|
||||
// Clamp the requested quantity to what's available (no cap for untracked
|
||||
// variants); a removed variant clamps to 0 and drops out below.
|
||||
let clamped = match published_variant(&ctx, form.variant_id).await? {
|
||||
Some((variant, _)) => variant.cap(form.quantity),
|
||||
None => 0,
|
||||
};
|
||||
|
||||
let mut items = parse_cart(&jar);
|
||||
let clamped = form.quantity.clamp(0, stock);
|
||||
if let Some(entry) = items.iter_mut().find(|(id, _)| *id == form.variant_id) {
|
||||
entry.1 = clamped;
|
||||
}
|
||||
@@ -208,7 +209,7 @@ pub(crate) async fn resolve_cart(
|
||||
let Some((variant, product)) = published_variant(ctx, id).await? else {
|
||||
continue;
|
||||
};
|
||||
let qty = qty.clamp(0, variant.stock);
|
||||
let qty = variant.cap(qty);
|
||||
if qty == 0 {
|
||||
continue;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user