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 */