-- name: CreateProduct :one
INSERT INTO products (
  merchant_id, 
  name,
  selling_price,
  purchase_price,
  stock
) VALUES (
  $1, $2, $3, $4, $5
)
RETURNING *;

-- name: GetStockForUpdateStock :one
SELECT * FROM products
WHERE id = $1 
LIMIT 1
FOR NO KEY UPDATE;

-- name: UpdateProductStock :exec
UPDATE products   
SET stock = $1
WHERE id = $2;

-- name: GetProduct :one
SELECT * FROM products
WHERE id = $1;

-- name: ListProducts :many
SELECT * FROM products
WHERE merchant_id = $1
ORDER BY index_id
LIMIT $2
OFFSET $3;

-- name: UpdateProduct :one
UPDATE products
SET name = $2, selling_price = $3, purchase_price = $4, updated_at = $5
WHERE id = $1
RETURNING *;

-- name: DeleteProduct :exec
DELETE FROM products WHERE id = $1;