CREATE OR REPLACE FUNCTION public.fn_upsert_partner(p_partner_id bigint, p_email valid_email, p_name text, p_surname text, p_phone intl_phone, p_country iso_country, p_range text, p_mismatch_key text)
 RETURNS text
 LANGUAGE plpgsql
AS $function$
-- Valida identidad de un partner y lo crea si no existe.
-- Devuelve NULL si todo ok, o p_mismatch_key si hay conflicto de identidad.
DECLARE
    v_db_id    bigint;
    v_db_email valid_email;
BEGIN
    SELECT partner_id, email INTO v_db_id, v_db_email
    FROM public.partners
    WHERE partner_id = p_partner_id OR email = p_email;

    IF v_db_id IS NOT NULL OR v_db_email IS NOT NULL THEN
        IF v_db_id != p_partner_id OR v_db_email != p_email THEN
            RETURN p_mismatch_key;
        END IF;
    ELSE
        INSERT INTO public.partners (partner_id, name, surname, email, phone, country, zinzino_range)
        VALUES (p_partner_id, p_name, p_surname, p_email, p_phone, p_country, p_range);
    END IF;

    RETURN NULL;
END;
$function$
;
