-- Deploy camper:setup_redsys to pg -- requires: roles -- requires: schema_camper -- requires: redsys -- requires: redsys_environment -- requires: redsys_integration begin; set search_path to camper, public; create or replace function setup_redsys(company integer, merchant_code text, terminal_number integer, environment redsys_environment, integration redsys_integration, encrypt_key text) returns void as $$ begin if encrypt_key is null then update redsys set merchant_code = setup_redsys.merchant_code, terminal_number = setup_redsys.terminal_number, environment = setup_redsys.environment, integration = setup_redsys.integration, encrypt_key = coalesce(decode(setup_redsys.encrypt_key, 'base64'), redsys.encrypt_key) where company_id = company ; else insert into redsys (company_id, merchant_code, terminal_number, environment, integration, encrypt_key) values (company, merchant_code, terminal_number, environment, integration, decode(encrypt_key, 'base64')) on conflict (company_id) do update set merchant_code = excluded.merchant_code, terminal_number = excluded.terminal_number, environment = excluded.environment, integration = excluded.integration, encrypt_key = coalesce(excluded.encrypt_key, redsys.encrypt_key) ; end if; end $$ language plpgsql ; revoke execute on function setup_redsys(integer, text, integer, redsys_environment, redsys_integration, text) from public; grant execute on function setup_redsys(integer, text, integer, redsys_environment, redsys_integration, text) to admin; commit;