-- Deploy numerus:add_product to pg -- requires: schema_numerus -- requires: product -- requires: product_tax -- requires: parse_price -- requires: company -- requires: currency -- requires: tag_name begin; set search_path to numerus, public; create or replace function add_product(company_id integer, name text, description text, price text, taxes integer[], tags tag_name[]) returns uuid as $$ declare pid integer; pslug uuid; begin insert into product (company_id, name, description, price, tags) select add_product.company_id, add_product.name, add_product.description, parse_price(add_product.price, decimal_digits), add_product.tags from company join currency using (currency_code) where company.company_id = add_product.company_id returning product_id, slug into pid, pslug; insert into product_tax (product_id, tax_id) select pid, tax_id from unnest(taxes) as tax(tax_id); return pslug; end; $$ language plpgsql; revoke execute on function add_product(integer, text, text, text, integer[], tag_name[]) from public; grant execute on function add_product(integer, text, text, text, integer[], tag_name[]) to invoicer; grant execute on function add_product(integer, text, text, text, integer[], tag_name[]) to admin; commit;