import { CieloTransactionInterface } from "../interface/cielo-transaction.interface"; import { IHttpResponse, Utils, IHttpRequestOptions, HttpRequestMethodEnum } from "./utils"; import { RecurrentModifyCustomerModel, RecurrentCreateModel, RecurrentModifyEndDateModel, RecurrentModifyIntervalModel, RecurrentModifyDayModel, RecurrentModifyAmountModel, RecurrentModifyNextPaymentDateModel, RecurrentModifyModel, RecurrentCreateResponse } from "../models/recurrent-payment"; import { CustomerModel, PaymentRequestModel, PaymentRecurrentModifyModel } from "../models"; import { RecurrentModifyPaymentModel } from "../models/recurrent-payment/recurrent-modify-payment.model"; export class Recurrent { private cieloTransactionParams: CieloTransactionInterface; private util: Utils; constructor(transaction: CieloTransactionInterface) { this.cieloTransactionParams = transaction; this.util = new Utils(this.cieloTransactionParams) } public create(params: RecurrentCreateModel): Promise { return this.util.postToSales(params); } public modifyCustomer(params: RecurrentModifyCustomerModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Customer`, data: params.customer }; return this.modify(modifyParams); }; public modifyEndDate(params: RecurrentModifyEndDateModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/EndDate`, data: params.endDate }; return this.modify(modifyParams); }; public modifyInterval(params: RecurrentModifyIntervalModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Interval`, data: params.interval }; return this.modify(modifyParams); }; public modifyRecurrencyDay(params: RecurrentModifyDayModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/RecurrencyDay`, data: params.recurrencyDay }; return this.modify(modifyParams); }; public modifyAmount(params: RecurrentModifyAmountModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Amount`, data: (params.amount * 100).toString() }; return this.modify(modifyParams); }; public modifyNextPaymentDate(params: RecurrentModifyNextPaymentDateModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/NextPaymentDate`, data: params.nextPaymentDate }; return this.modify(modifyParams); }; public modifyPayment(params: RecurrentModifyPaymentModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Payment`, data: params.payment }; return this.modify(modifyParams); }; public deactivate(params: RecurrentModifyModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Deactivate`, data: '' }; return this.modify(modifyParams); }; public reactivate(params: RecurrentModifyModel): Promise { const modifyParams = { path: `/1/RecurrentPayment/${params.paymentId}/Reactivate`, data: '' }; return this.modify(modifyParams); }; private modify(params: {path: string, data: string | CustomerModel | PaymentRecurrentModifyModel | number}): Promise { const options: IHttpRequestOptions = this.util.getHttpRequestOptions({ method: HttpRequestMethodEnum.PUT, path: params.path, hostname: this.cieloTransactionParams.hostnameTransacao, }); return this.util.httpRequest(options, params.data); } }