exchange

Base system with REST service to issue digital coins, run by the payment service provider
Log | Files | Refs | Submodules | README | LICENSE

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 $$;