anastasis

Credential backup and recovery protocol and service
Log | Files | Refs | Submodules | README | LICENSE

update_to_challenge_payment_paid.c (2851B)


      1 /*
      2   This file is part of Anastasis
      3   Copyright (C) 2020-2022 Anastasis SARL
      4 
      5   Anastasis is free software; you can redistribute it and/or modify it under the
      6   terms of the GNU Affero General Public License as published by the Free Software
      7   Foundation; either version 3, or (at your option) any later version.
      8 
      9   Anastasis 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 Affero General Public License for more details.
     12 
     13   You should have received a copy of the GNU Affero General Public License along with
     14   Anastasis; see the file COPYING.GPL.  If not, see <http://www.gnu.org/licenses/>
     15 */
     16 /**
     17  * @file stasis/update_to_challenge_payment_paid.c
     18  * @brief Anastasis database: update to challenge payment paid
     19  * @author Christian Grothoff
     20  */
     21 #include "platform.h"
     22 #include "anastasis-db_pg.h"
     23 #include "anastasis/anastasis-database/update_to_challenge_payment_paid.h"
     24 #include "anastasis/anastasis-database/transaction.h"
     25 #include "anastasis/anastasis-database/preflight.h"
     26 #include <taler/taler_pq_lib.h>
     27 
     28 
     29 /**
     30  * Update payment status of challenge
     31  *
     32  * @param truth_uuid which challenge received a payment
     33  * @param payment_identifier proof of payment, must be unique and match pending payment
     34  * @param amount what was actually paid, in the currency it was paid in
     35  * @return transaction status
     36  */
     37 enum GNUNET_DB_QueryStatus
     38 ANASTASIS_DB_update_to_challenge_payment_paid (
     39   const struct ANASTASIS_CRYPTO_TruthUUIDP *truth_uuid,
     40   const struct ANASTASIS_PaymentSecretP *payment_identifier,
     41   const struct TALER_Amount *amount)
     42 {
     43   struct GNUNET_PQ_QueryParam params[] = {
     44     GNUNET_PQ_query_param_auto_from_type (payment_identifier),
     45     GNUNET_PQ_query_param_auto_from_type (truth_uuid),
     46     TALER_PQ_query_param_amount_with_currency (pg->conn,
     47                                                amount),
     48     GNUNET_PQ_query_param_end
     49   };
     50 
     51   /* Until now the row held the asking price in the provider's primary
     52      currency, because at order creation time it was not yet known which
     53      of the offered currencies the wallet would settle in.  Now it is, and
     54      a later refund must return that one. */
     55   PREPARE ("update_to_challenge_payment_paid",
     56            "UPDATE anastasis_challenge_payment "
     57            "SET"
     58            " paid=TRUE"
     59            ",amount=$3 "
     60            "WHERE"
     61            "  payment_identifier=$1"
     62            " AND"
     63            "  refunded=FALSE"
     64            " AND"
     65            "  truth_uuid=$2"
     66            " AND"
     67            "  paid=FALSE;");
     68   return GNUNET_PQ_eval_prepared_non_select (pg->conn,
     69                                              "update_to_challenge_payment_paid",
     70                                              params);
     71 }
     72 
     73 
     74 /* end of update_to_challenge_payment_paid.c */