merchant

Merchant backend to process payments, run by merchants
Log | Files | Refs | Submodules | README | LICENSE

iterate_orders.h (3226B)


      1 /*
      2    This file is part of TALER
      3    Copyright (C) 2022 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  * @file src/include/merchant-database/iterate_orders.h
     18  * @brief implementation of the iterate_orders function for Postgres
     19  * @author Iván Ávalos
     20  */
     21 #ifndef MERCHANT_DATABASE_ITERATE_ORDERS_H
     22 #define MERCHANT_DATABASE_ITERATE_ORDERS_H
     23 
     24 #include <taler/taler_util.h>
     25 #include <taler/taler_json_lib.h>
     26 #include "merchantdb_lib.h"
     27 
     28 
     29 /**
     30  * Filter preferences.
     31  */
     32 struct TALER_MERCHANTDB_OrderFilter
     33 {
     34   /**
     35    * Filter orders by this fulfillment URL.
     36    */
     37   const char *fulfillment_url;
     38 
     39   /**
     40    * Filter orders by this session ID.
     41    */
     42   const char *session_id;
     43 
     44   /**
     45    * Filter by payment status.
     46    */
     47   enum TALER_EXCHANGE_YesNoAll paid;
     48 
     49   /**
     50    * Filter by refund status.
     51    */
     52   enum TALER_EXCHANGE_YesNoAll refunded;
     53 
     54   /**
     55    * Filter by wire transfer status.
     56    */
     57   enum TALER_EXCHANGE_YesNoAll wired;
     58 
     59   /**
     60    * Filter by expiration status.  An order is expired if it is unpaid and
     61    * its payment deadline is in the past.
     62    */
     63   enum TALER_EXCHANGE_YesNoAll expired;
     64 
     65   /**
     66    * Filter orders by date, exact meaning depends on @e delta.
     67    */
     68   struct GNUNET_TIME_Timestamp date;
     69 
     70   /**
     71    * Filter orders by order serial number, exact meaning depends on @e delta.
     72    */
     73   uint64_t start_row;
     74 
     75   /**
     76    * takes value of the form N (-N), so that at most N values strictly older
     77    * (younger) than start and date are returned.
     78    */
     79   int64_t delta;
     80 
     81   /**
     82    * Timeout for long-polling.
     83    */
     84   struct GNUNET_TIME_Relative timeout;
     85 
     86   /**
     87    * Filter to apply on the summary of the order.
     88    */
     89   const char *summary_filter;
     90 
     91 };
     92 
     93 
     94 /**
     95  * Typically called by `iterate_orders`.
     96  *
     97  * @param cls a `json_t *` JSON array to build
     98  * @param order_id ID of the order
     99  * @param order_serial row of the order in the database
    100  * @param timestamp creation time of the order in the database
    101  */
    102 typedef void
    103 (*TALER_MERCHANTDB_OrdersCallback)(
    104   void *cls,
    105   const char *order_id,
    106   uint64_t order_serial,
    107   struct GNUNET_TIME_Timestamp timestamp);
    108 
    109 /**
    110  * Retrieve orders given the @a instance_id.
    111  *
    112  * @param pg database context
    113  * @param instance_id instance to obtain order of
    114  * @param of filter to apply when looking up orders
    115  * @param cb callback to pass all the orders that are found
    116  * @param cb_cls closure for @a cb
    117  * @return transaction status
    118  */
    119 enum GNUNET_DB_QueryStatus
    120 TALER_MERCHANTDB_iterate_orders (
    121   struct TALER_MERCHANTDB_PostgresContext *pg,
    122   const char *instance_id,
    123   const struct TALER_MERCHANTDB_OrderFilter *of,
    124   TALER_MERCHANTDB_OrdersCallback cb,
    125   void *cb_cls);
    126 
    127 #endif