Files
oper/DB/PACKAGE_BODIES/PKG_REPOSITORY_ACTIONS.sql

493 lines
16 KiB
MySQL
Raw Normal View History

2023-06-08 11:55:59 -03:00
--------------------------------------------------------
-- DDL for Package Body PKG_REPOSITORY_ACTIONS
--------------------------------------------------------
CREATE OR REPLACE EDITIONABLE PACKAGE BODY "ENVX_OPER"."PKG_REPOSITORY_ACTIONS" AS
----------------------------------------------------
--------------------- FUNCTIONS --------------------
----------------------------------------------
FUNCTION f_get_branch (
p_json_parameters IN CLOB,
po_message OUT VARCHAR2
) RETURN CLOB IS
v_rest_request_id VARCHAR2(500);
v_id_repository NUMBER;
-- Variables para realizar la llamada http
v_url VARCHAR2(2000);
v_http_method VARCHAR2(100);
v_http_headers http_headers_tab;
v_body CLOB;
v_http_status_code NUMBER;
v_response CLOB;
v_response_code VARCHAR2(50);
v_error_message VARCHAR2(400);
v_count_reg NUMBER := 0;
v_list_size VARCHAR2(100);
v_page_number VARCHAR2(100);
BEGIN
--------------------------------------------------------
-- Se obtienen los valores de solicitud y repositorio --
v_rest_request_id := JSON_VALUE(p_json_parameters,
'$.rest_request_id');
v_id_repository := JSON_VALUE(p_json_parameters,
'$.repository_id');
v_list_size := JSON_VALUE(p_json_parameters,
'$.list_size');
v_page_number := JSON_VALUE(p_json_parameters,
'$.page_number');
-- Se obtienen los valores de solicitud y repositorio --
--------------------------------------------------------
-- Extraer URL de una tabla --
v_url := 'https://api.dev.envx.io/repo/v1/action/branch?restRequestId='
|| v_rest_request_id
|| '&repositoryId='
|| v_id_repository
|| '&groupType=default&pageNumber='
|| v_page_number
|| '&listSize='
|| v_list_size;
v_http_method := 'GET';
-------------------------------------
-- Llamada REST a /action/branches --
pkg_sicd_commons.p_rest_call_apim(
v_url,
v_http_method,
v_body,
v_http_status_code,
v_http_headers,
v_response,
v_response_code,
v_error_message
);
-- Llamada REST a /action/branches --
-------------------------------------
RETURN v_response;
EXCEPTION
WHEN OTHERS THEN
po_message := 'Error: ' || sqlerrm;
END;
----------------------------------------------
----------------------------------------------
FUNCTION f_get_filesgroup (
p_json_parameters IN CLOB,
po_message OUT VARCHAR2
) RETURN CLOB AS
v_json_aux json :=
JSON(
p_json_parameters
);
-- Variables para la lectura de json de entrada --
v_rest_request_id VARCHAR2(100);
v_request_id NUMBER;
v_repository_id NUMBER;
v_branch_name VARCHAR2(50);
v_type_group VARCHAR2(100);
v_list_size VARCHAR2(100);
v_page_number VARCHAR2(100);
-- Variables para la lectura de json de entrada --
-- Variables para ejecutar p_rest_call --
v_url VARCHAR2(2000);
v_http_method VARCHAR2(100);
v_http_headers http_headers_tab;
v_body CLOB;
v_http_status_code NUMBER;
v_response CLOB;
v_response_code VARCHAR2(50);
v_error_message VARCHAR2(400);
-- Variables para ejecutar p_rest_call --
BEGIN
---------------------------------------
-- Obtencion de variables de trabajo --
v_request_id := JSON_VALUE(v_json_aux,
'$.request_id');
v_rest_request_id := JSON_VALUE(v_json_aux,
'$.rest_request_id');
v_repository_id := JSON_VALUE(v_json_aux,
'$.repository_id');
v_branch_name := JSON_VALUE(v_json_aux,
'$.branch_name');
v_type_group := JSON_VALUE(v_json_aux,
'$.type_group');
v_list_size := JSON_VALUE(v_json_aux,
'$.list_size');
v_page_number := JSON_VALUE(v_json_aux,
'$.page_number');
-- v_files_group_id := JSON_VALUE(v_json_aux, '$.filesGroupId');
-- Obtencion de variables de trabajo --
---------------------------------------
IF v_repository_id IS NOT NULL THEN
-- Extraer URL de una tabla --
v_url := 'https://api.dev.envx.io/repo/v1/action/filesGroup?'
|| 'restRequestId='
|| v_rest_request_id
|| '&repositoryId='
|| v_repository_id
|| '&branchName='
|| v_branch_name
|| '&groupType='
|| v_type_group
|| '&listSize='
|| v_list_size
|| '&pageNumber='
|| v_page_number;
-- || '&filesGroupId='
-- || v_files_group_id;
v_http_method := 'GET';
-----------------------------------------------------
-- Se realiza la llamada REST a /action/filesGroup --
pkg_sicd_commons.p_rest_call_apim(
v_url,
v_http_method,
v_body,
v_http_status_code,
v_http_headers,
v_response,
v_response_code,
v_error_message
);
-- Se realiza la llamada REST a /action/filesGroup --
-----------------------------------------------------
RETURN v_response;
po_message := v_error_message;
END IF;
EXCEPTION
WHEN OTHERS THEN
po_message := 'Error: ' || sqlerrm;
END;
----------------------------------------------
----------------------------------------------
FUNCTION f_get_file (
p_json_parameters IN CLOB,
po_message OUT VARCHAR2
) RETURN CLOB AS
v_json_aux CLOB;
-- Variables para la lectura de parametros de entrada --
v_rest_request_id VARCHAR2(100);
v_request_id NUMBER;
v_repository_id NUMBER;
v_branch_name VARCHAR2(50);
v_type_group VARCHAR2(100);
v_group_id VARCHAR2(100);
v_list_size VARCHAR2(100);
v_page_number VARCHAR2(100);
v_http_headers http_headers_tab;
-- Variables para la lectura de parametros de entrada --
-- Variables para ejecutar la llamada http --
v_url VARCHAR2(2000);
v_http_method VARCHAR2(100);
v_body CLOB;
v_http_status_code NUMBER;
v_response CLOB;
v_response_code VARCHAR2(50);
v_error_message VARCHAR2(400);
-- Variables para ejecutar la llamada http --
BEGIN
--------------------------------------------------------
-- Se obtienen los valores de solicitud y repositorio --
v_request_id := JSON_VALUE(p_json_parameters,
'$.request_id');
v_rest_request_id := JSON_VALUE(p_json_parameters,
'$.rest_request_id');
v_repository_id := JSON_VALUE(p_json_parameters,
'$.repository_id');
v_branch_name := JSON_VALUE(p_json_parameters,
'$.branch_name');
v_type_group := JSON_VALUE(p_json_parameters,
'$.type_group');
v_group_id := JSON_VALUE(p_json_parameters,
'$.group_id');
v_list_size := JSON_VALUE(p_json_parameters,
'$.list_size');
v_page_number := JSON_VALUE(p_json_parameters,
'$.page_number');
-- Se obtienen los valores de solicitud y repositorio --
--------------------------------------------------------
IF v_repository_id IS NOT NULL THEN
-- Extraer URL de una tabla --
v_url := 'https://api.dev.envx.io/repo/v1/action/files?'
|| 'restRequestId='
|| v_rest_request_id
|| '&repositoryId='
|| v_repository_id
|| '&branchName='
|| v_branch_name
|| '&groupType='
|| v_type_group
|| '&filesGroupId='
|| v_group_id
|| '&listSize='
|| v_list_size
|| '&pageNumber='
|| v_page_number;
v_http_method := 'GET';
------------------------------------------------
-- Se realiza la llamada REST a file --
pkg_sicd_commons.p_rest_call_apim(
v_url,
v_http_method,
v_body,
v_http_status_code,
v_http_headers,
v_response,
v_response_code,
v_error_message
);
-- Se realiza la llamada REST a file --
------------------------------------------------
RETURN v_response;
po_message := 'Mostrando la pagina ' || v_page_number;
END IF;
EXCEPTION
WHEN OTHERS THEN
po_message := 'Error: ' || sqlerrm;
END;
----------------------------------------------
----------------------------------------------
FUNCTION f_filesgroup_query (
pi_filegroup_type IN VARCHAR2,
pi_filesgroup_jsonc IN VARCHAR2
) RETURN CLOB AS
v_query CLOB;
v_select VARCHAR2(4000);
BEGIN
SELECT UNIQUE 'SELECT ' || list_representation
INTO v_select
FROM repository_type_search t
WHERE t.alias = pi_filegroup_type;
v_query := v_select
|| '
FROM JSON_TABLE(json(:'
|| upper(pi_filesgroup_jsonc)
|| q'~), '$'
COLUMNS (
pageNumber NUMBER PATH '$.pageNumber',
totalPage NUMBER PATH '$.totalPage',
filesGroup JSON PATH '$.filesGroup[*]',
NESTED PATH '$.filesGroup[*]' COLUMNS(
c_date VARCHAR2(100) PATH '$.date',
author VARCHAR2(100) PATH '$.author',
email VARCHAR2(100) PATH '$.email',
groupId VARCHAR2(100) PATH '$.groupId',
message VARCHAR2(100) PATH '$.message',
total NUMBER PATH '$.stats.total',
additions NUMBER PATH '$.stats.additions',
deletions NUMBER PATH '$.stats.deletions'
)
)
)
ORDER BY 1;~';
RETURN v_query;
END;
----------------------------------------------
----------------------------------------------
FUNCTION f_files_query (
pi_files_jsonc IN VARCHAR2
) RETURN CLOB AS
v_query CLOB;
BEGIN
v_query := q'~SELECT jt.files as file_name, APEX_UTIL.URL_ENCODE(jt.files) AS file_id
FROM JSON_TABLE(nvl(:~'
|| pi_files_jsonc
|| q'~,'[ ]'), '$.files[*]'
COLUMNS (files PATH '$.file')
) jt
UNION
SELECT file_name as file_name, APEX_UTIL.URL_ENCODE(file_name) AS file_id
FROM json_table(:P4_SELECTED_OBJ,'$[*]' COLUMNS (file_name PATH '$.object_name' )) q
ORDER BY 1;~';
RETURN v_query;
END;
----------------------------------------------
----------------------------------------------
FUNCTION f_branches_query (
pi_branches_jsonc IN VARCHAR2
) RETURN CLOB AS
v_query CLOB;
v_select VARCHAR2(4000);
BEGIN
v_query := q'~SELECT branch_name, branch_name as id_branch FROM JSON_TABLE(JSON(:~'
|| pi_branches_jsonc
|| q'~), '$.branch[*]'
COLUMNS (
branch_name VARCHAR2(4000) PATH '$.name'
));~';
RETURN v_query;
END;
----------------------------------------------
----------------------------------------------
PROCEDURE p_manage_object_form (
pi_selector IN VARCHAR2,
pi_groups IN VARCHAR2,
p_selected_list IN OUT CLOB,
p_selected_obj IN OUT CLOB
) AS
v_json_array json_array_t := json_array_t();
v_object VARCHAR2(4000);
v_object_aux VARCHAR2(4000);
v_array apex_application_global.vc_arr2;
v_coincidence_flag NUMBER := 0;
v_log_message CLOB;
v_error VARCHAR2(500);
BEGIN
IF pi_selector IS NOT NULL THEN
FOR i IN 1..regexp_count(
pi_selector,
':'
) + 1 LOOP
v_object := regexp_substr(
pi_selector,
'[^:]+',
1,
i
);
BEGIN
SELECT object_json
INTO v_object_aux
FROM
JSON_TABLE (
JSON(
p_selected_obj
), '$[*]'
COLUMNS
object_name PATH '$.object_name',
object_json JSON PATH '$'
)
q
WHERE q.object_name = utl_url.unescape(v_object);
-- v_object_aux := UTL_URL.UNESCAPE(v_object_aux);
EXCEPTION
WHEN no_data_found THEN
v_object_aux := '{"object_id":"'
|| pi_groups
|| '","object_name":"'
|| utl_url.unescape(v_object)
|| '","object_order":"'
|| i
|| '"}';
WHEN too_many_rows THEN
v_error := sqlerrm;
INSERT INTO internal_test VALUES (
systimestamp,
p_selected_obj,
v_error,
pi_selector
);
COMMIT;
END;
v_json_array.append(
JSON(
v_object_aux
)
);
END LOOP;
p_selected_list := pi_selector;
p_selected_obj := v_json_array.to_clob();
END IF;
END;
----------------------------------------------
PROCEDURE p_save_object_form(
pi_selected_obj IN CLOB,
pi_json_parameter IN CLOB,
po_message OUT VARCHAR2
) AS
v_groups VARCHAR2(400);
v_selected_list CLOB;
v_selector CLOB; -- 'test1.txt:test2.txt:test3.txt:test4.txt'
v_id_request NUMBER := 0;
v_id_pattern NUMBER := 0;
v_id_req_hgroup VARCHAR2(400);
v_selected_obj CLOB;
BEGIN
v_selector := JSON_VALUE(pi_json_parameter, '$.selector');
v_groups := JSON_VALUE(pi_json_parameter, '$.groups');
v_selected_list := JSON_VALUE(pi_json_parameter, '$.selected_list');
v_id_request := JSON_VALUE(pi_json_parameter, '$.id_request');
v_id_pattern := JSON_VALUE(pi_json_parameter, '$.id_pattern');
v_id_req_hgroup := JSON_VALUE(pi_json_parameter, '$.id_req_hgroup');
v_selected_obj := pi_selected_obj;
DELETE deployment_req_object
WHERE id_req_hgroup = v_id_req_hgroup;
COMMIT;
IF v_selector IS NOT NULL THEN
INSERT INTO deployment_req_object (
id_dep_req_object,
id_request,
id_pattern,
id_req_hgroup,
object_order,
id_object_repo,
id_reqdet_instance,
object_dep_status,
object_version,
object_name,
object_source_path
)SELECT s_deployment_req_obj_id.NEXTVAL,
v_id_request,
v_id_pattern,
v_id_req_hgroup,
ROWNUM as object_order,
object_id,
NULL,
NULL,
NULL,
UTL_URL.UNESCAPE(REGEXP_SUBSTR(object_name, '[^/]+$', 1, 1)) as object_name,
UTL_URL.UNESCAPE(REGEXP_SUBSTR(object_name, '.*\/')) as object_path
FROM
JSON_TABLE(
JSON(
pi_selected_obj
),
'$[*]'
COLUMNS (
object_name VARCHAR2 ( 300 ) PATH '$.object_name',
object_id VARCHAR2 ( 300 ) PATH '$.object_id'
)
);
COMMIT;
END IF;
EXCEPTION
WHEN OTHERS THEN
po_message := 'Error: ' || sqlerrm;
END;
----------------------------------------------
END pkg_repository_actions;
/