do_reserve_legitimization_process.sql (3587B)
1 -- 2 -- This file is part of TALER 3 -- Copyright (C) 2026 Taler Systems SA 4 -- 5 -- TALER is free software; you can redistribute it and/or modify it under the 6 -- terms of the GNU General Public License as published by the Free Software 7 -- Foundation; either version 3, or (at your option) any later version. 8 -- 9 -- TALER is distributed in the hope that it will be useful, but WITHOUT ANY 10 -- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR 11 -- A PARTICULAR PURPOSE. See the GNU General Public License for more details. 12 -- 13 -- You should have received a copy of the GNU General Public License along with 14 -- TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/> 15 -- 16 17 DROP FUNCTION IF EXISTS exchange_do_reserve_legitimization_process; 18 CREATE FUNCTION exchange_do_reserve_legitimization_process( 19 IN in_h_payto BYTEA, 20 IN in_measure_index INT4, 21 IN in_legitimization_measure_serial_id INT8, 22 IN in_provider_name TEXT, 23 IN in_now INT8, 24 IN in_lease_expiration INT8, 25 OUT out_process_row INT8, 26 OUT out_start_time INT8, 27 OUT out_redirect_url TEXT, 28 OUT out_state INT4) 29 LANGUAGE plpgsql 30 AS $$ 31 DECLARE 32 my_rec RECORD; 33 BEGIN 34 -- Keep these INT4 values synchronized with 35 -- enum TALER_EXCHANGEDB_KycProcessReservationState: 36 -- 0 = KPRS_READY, 1 = KPRS_OWNER, 2 = KPRS_BUSY. 37 PERFORM FROM kyc_targets 38 WHERE h_normalized_payto=in_h_payto 39 FOR UPDATE; 40 41 SELECT legitimization_process_serial_id, 42 start_time, 43 redirect_url 44 INTO my_rec 45 FROM legitimization_processes 46 WHERE h_payto=in_h_payto 47 AND provider_name=in_provider_name 48 AND NOT finished 49 AND process_expiration_time > in_now 50 ORDER BY start_time DESC 51 LIMIT 1 52 FOR UPDATE; 53 54 IF FOUND 55 THEN 56 out_process_row=my_rec.legitimization_process_serial_id; 57 out_start_time=my_rec.start_time; 58 out_redirect_url=my_rec.redirect_url; 59 IF out_redirect_url IS NULL 60 THEN 61 out_state=2; 62 ELSE 63 out_state=0; 64 END IF; 65 RETURN; 66 END IF; 67 68 UPDATE legitimization_processes 69 SET finished=TRUE 70 WHERE h_payto=in_h_payto 71 AND provider_name=in_provider_name 72 AND NOT finished; 73 74 UPDATE legitimization_processes 75 SET h_payto=in_h_payto 76 ,start_time=in_now 77 ,process_expiration_time=in_lease_expiration 78 ,expiration_time=0 79 ,provider_name=in_provider_name 80 ,provider_user_id=NULL 81 ,provider_legitimization_id=NULL 82 ,redirect_url=NULL 83 ,finished=FALSE 84 ,error_code=0 85 ,error_message=NULL 86 WHERE legitimization_measure_serial_id=in_legitimization_measure_serial_id 87 AND measure_index=in_measure_index 88 RETURNING legitimization_process_serial_id, 89 start_time 90 INTO out_process_row, 91 out_start_time; 92 93 IF NOT FOUND 94 THEN 95 INSERT INTO legitimization_processes 96 (h_payto 97 ,start_time 98 ,process_expiration_time 99 ,expiration_time 100 ,provider_name 101 ,provider_user_id 102 ,provider_legitimization_id 103 ,redirect_url 104 ,finished 105 ,legitimization_measure_serial_id 106 ,measure_index 107 ,error_code 108 ,error_message 109 ) VALUES 110 (in_h_payto 111 ,in_now 112 ,in_lease_expiration 113 ,0 114 ,in_provider_name 115 ,NULL 116 ,NULL 117 ,NULL 118 ,FALSE 119 ,in_legitimization_measure_serial_id 120 ,in_measure_index 121 ,0 122 ,NULL) 123 RETURNING legitimization_process_serial_id, 124 start_time 125 INTO out_process_row, 126 out_start_time; 127 END IF; 128 out_redirect_url=NULL; 129 out_state=1; 130 END $$;