@cocalc/server
Version:
CoCalc server functionality: functions used by either the hub and the next.js server
52 lines (47 loc) • 1.34 kB
text/typescript
/*
Edit an item in the user's shopping cart.
*/
import { isValidUUID } from "@cocalc/util/misc";
import getPool from "@cocalc/database/pool";
import {
ProductType,
ProductDescription,
} from "@cocalc/util/db-schema/shopping-cart-items";
interface Options {
account_id: string;
id: number;
product?: ProductType;
description?: ProductDescription;
}
export default async function editCart({
account_id,
id,
product,
description,
}: Options): Promise<number> {
if (!isValidUUID(account_id)) {
throw Error("account_id is invalid");
}
const pool = getPool();
let query;
const params: (ProductDescription | string | number)[] = [account_id, id];
if (product && description) {
query =
"UPDATE shopping_cart_items SET product=$3, description=$4 WHERE account_id=$1 AND id=$2";
params.push(product);
params.push(description);
} else if (product) {
query =
"UPDATE shopping_cart_items SET product=$3 WHERE account_id=$1 AND id=$2";
params.push(product);
} else if (description) {
query =
"UPDATE shopping_cart_items SET description=$3 WHERE account_id=$1 AND id=$2";
params.push(description);
} else {
return 0; //nothing to change
}
query += " AND purchased IS NULL";
const { rowCount } = await pool.query(query, params);
return rowCount;
}