-- Deploy camper:ready_payment to pg -- requires: roles -- requires: schema_camper -- requires: payment -- requires: payment_customer -- requires: country_code -- requires: email -- requires: extension_pg_libphonenumber begin; set search_path to camper, public; drop function if exists ready_payment(uuid, text, text, text, text, country_code, email, text, text); create or replace function ready_payment(payment_slug uuid, customer_name text, customer_address text, customer_post_code text, customer_city text, customer_country_code country_code, customer_email email, customer_phone text, customer_lang_tag text, customer_acsi_card boolean) returns integer as $$ declare pid integer; begin update payment set payment_status = 'pending' , updated_at = current_timestamp where slug = payment_slug and payment_status = 'draft' returning payment_id into pid ; if pid is null then raise check_violation using message = 'insert or update on table "payment" violates check constraint "payment_is_draft"'; end if; insert into payment_customer (payment_id, full_name, address, postal_code, city, country_code, email, phone, acsi_card, lang_tag) values (pid, customer_name, customer_address, customer_post_code, customer_city, customer_country_code, customer_email, parse_packed_phone_number(customer_phone, customer_country_code), customer_acsi_card, customer_lang_tag) on conflict (payment_id) do update set full_name = excluded.full_name , address = excluded.address , postal_code = excluded.postal_code , city = excluded.city , country_code = excluded.country_code , email = excluded.email , phone = excluded.phone , acsi_card = excluded.acsi_card , lang_tag = excluded.lang_tag ; return pid; end; $$ language plpgsql ; revoke execute on function ready_payment(uuid, text, text, text, text, country_code, email, text, text, boolean) from public; grant execute on function ready_payment(uuid, text, text, text, text, country_code, email, text, text, boolean) to guest; grant execute on function ready_payment(uuid, text, text, text, text, country_code, email, text, text, boolean) to employee; grant execute on function ready_payment(uuid, text, text, text, text, country_code, email, text, text, boolean) to admin; commit;