All files / lib/resources transfers.js

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147                                                                                                                                                                                                                                                                                                     
/**
 * @name Transfers
 * @description This module exposes functions
 *              related to the `/itransfers` path.
 *
 * @module transfers
 **/
import { cond, has, T, curry } from 'ramda'
 
import routes from '../routes'
import request from '../request'
 
const findOne = curry((opts, body) =>
  request.get(opts, routes.transfers.details(body.id), {})
)
 
const findAll = curry((opts, pagination) =>
  request.get(opts, routes.transfers.base, pagination || {})
)

 
/**
 * `GET /transfers`
 * Makes a request to /transfers or to /transfers/:id
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 *
 * @param {Object} body The payload for the request.
 * {@link https://pagarme.readme.io/v1/reference#vendo-dados-de-uma-transferência|API Reference for this payload}
 * @param {Number} [body.id] The transfer's ID. If not sent a
 *                           transfers list will be returned instead.
 * @param {Number} [body.count] Pagination option to get a list of transfers.
 *                              Number of transfers in a page
 * @param {Number} [body.page] Pagination option for a list of transfers.
 *                             The page index.
*/
const find = (opts, body) =>
  cond([
    [has('id'), findOne(opts)],
    [T, findAll(opts)],
  ])(body)
 
/**
 * `GET /transfers`
 * Makes a request to /transfers to get all transfers.
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 *
 * @param {Object} body The payload for the request.
 * {@link https://pagarme.readme.io/v1/reference#vendo-dados-de-várias-transferências|API Reference for this payload}
 * @param {Number} [body.count] Pagination option to get a list of transfers.
 *                              Number of transfers in a page
 * @param {Number} [body.page] Pagination option for a list of transfers.
 *                             The page index.
*/
const all = (opts, pagination) =>
  findAll(opts, pagination)
 
/**
 * `POST /transfers`
 * Creates a transfer from the given payload.
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 * @param {Object} body The payload for the request
 * {@link https://pagarme.readme.io/v1/reference#criando-uma-transferência|API Reference for this payload}
 *
 * @returns {Promise} Resolves to the result of
 *                    the request or to an error.
 */
const create = (opts, body) =>
  request.post(opts, routes.transfers.base, body)
 
/**
 * `POST /transfers/:id/cancel`
 * Cancels a transfer
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 * @param {Object} body The payload for the request
 * {@link https://pagarme.readme.io/v1/reference#cancelando-uma-transferência|API Reference for this payload}
 * @param {Number} body.id The transfer's ID
 *
 * @returns {Promise} Resolves to the result of
 *                    the request or to an error.
 */
const cancel = (opts, body) =>
  request.post(opts, routes.transfers.cancel(body.id), {})
 
 
/**
 * `GET /transfers/days`
 * Returns company's transfers aggregated by day
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
*/
const days = opts =>
  request.get(opts, routes.transfers.days, {})
 
/**
 * `GET /transfers/limits`
 * Returns company's transfers limits
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 * @param {Object} params The params for the request
 * @param {String} params.recipient_id The recipient id
 *
*/
const limits = (opts, params) =>
  request.get(opts, routes.transfers.limits, params)
 
/**
 * `POST /transfers/:id/receipt`
 * exports a transfer
 *
 * @param {Object} opts An options params which
 *                      is usually already bound
 *                      by `connect` functions.
 * @param {Object} body The payload for the request
 * @param {Number} body.id The transfer's ID
 *
 * @returns {Promise} Resolves to the result of
 *                    the request or to an error.
 */
const transfersExport = (opts, body) =>
  request.post(opts, routes.transfers.transfersExport(body.id), {})
 
export default {
  find,
  all,
  create,
  cancel,
  days,
  limits,
  transfersExport,
}