Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,7 @@ public class P2PTransferBaseAccessor extends Accessor {

@GatewayAPI
@Getter(AccessLevel.PROTECTED)
private DurationBaseAccessor durations;

@GatewayAPI
@Getter(AccessLevel.PROTECTED)
private FrequencyBaseAccessor frequencies;
private RecurringP2PTransferBaseAccessor recurring;

@GatewayAPI
@Getter(AccessLevel.PROTECTED)
Expand Down Expand Up @@ -117,39 +113,21 @@ public void setAccounts(AccountBaseAccessor accounts) {
}

/**
* Accessor for duration operations
*
* @return accessor
*/
@API
public DurationBaseAccessor durations() {
return durations;
}

/**
* Sets duration accessor
* @param durations
*/
public void setDurations(DurationBaseAccessor durations) {
this.durations = durations;
}

/**
* Accessor for frequency operations
* Accessor for recurring transfer operations
*
* @return accessor
*/
@API
public FrequencyBaseAccessor frequencies() {
return frequencies;
public RecurringP2PTransferBaseAccessor recurring() {
return recurring;
}

/**
* Sets frequency accessor
* @param frequencies
* Sets recurring transfer accessor
* @param recurring
*/
public void setFrequencies(FrequencyBaseAccessor frequencies) {
this.frequencies = frequencies;
public void setRecurring(RecurringP2PTransferBaseAccessor recurring) {
this.recurring = recurring;
}

/**
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,127 @@
package com.mx.path.model.mdx.accessor.p2p_transfer;

import lombok.AccessLevel;
import lombok.Getter;

import com.mx.path.core.common.accessor.API;
import com.mx.path.core.common.accessor.AccessorMethodNotImplementedException;
import com.mx.path.core.common.gateway.GatewayAPI;
import com.mx.path.core.common.gateway.GatewayClass;
import com.mx.path.gateway.accessor.Accessor;
import com.mx.path.gateway.accessor.AccessorResponse;
import com.mx.path.model.mdx.model.MdxList;
import com.mx.path.model.mdx.model.p2p_transfer.RecurringP2PTransfer;

/**
* Accessor base for recurring P2P transfer operations
*/
@GatewayClass
@API(specificationUrl = "https://developer.mx.com/drafts/mdx/p2p_transfer/index.html#recurring-p2p-transfers")
public class RecurringP2PTransferBaseAccessor extends Accessor {
@GatewayAPI
@Getter(AccessLevel.PROTECTED)
private DurationBaseAccessor durations;

@GatewayAPI
@Getter(AccessLevel.PROTECTED)
private FrequencyBaseAccessor frequencies;

public RecurringP2PTransferBaseAccessor() {
}

/**
* Create a recurring P2P transfer
*
* @param p2pTransfer
* @return
*/
@GatewayAPI
@API(description = "Create a recurring P2P transfer")
public AccessorResponse<RecurringP2PTransfer> create(RecurringP2PTransfer p2pTransfer) {
throw new AccessorMethodNotImplementedException();
}

/**
* Delete a recurring P2P transfer
*
* @param id
* @return
*/
@GatewayAPI
@API(description = "Delete a recurring P2P transfer")
public AccessorResponse<Void> delete(String id) {
throw new AccessorMethodNotImplementedException();
}

/**
* Get a recurring P2P Transfer
*
* @param id
* @return
*/
@GatewayAPI
@API(description = "Get a recurring P2P transfer")
public AccessorResponse<RecurringP2PTransfer> get(String id) {
throw new AccessorMethodNotImplementedException();
}

/**
* List all recurring P2P transfers
*
* @return
*/
@GatewayAPI
@API(description = "List all recurring P2P transfers")
public AccessorResponse<MdxList<RecurringP2PTransfer>> list() {
throw new AccessorMethodNotImplementedException();
}

/**
* Update a recurring P2P transfer
*
* @param id
* @param p2pTransfer
* @return
*/
@GatewayAPI
@API(description = "Update a recurring P2P transfer")
public AccessorResponse<RecurringP2PTransfer> update(String id, RecurringP2PTransfer p2pTransfer) {
throw new AccessorMethodNotImplementedException();
}

/**
* Accessor for duration operations
*
* @return accessor
*/
@API
public DurationBaseAccessor durations() {
return durations;
}

/**
* Sets duration accessor
* @param durations
*/
public void setDurations(DurationBaseAccessor durations) {
this.durations = durations;
}

/**
* Accessor for frequency operations
*
* @return accessor
*/
@API
public FrequencyBaseAccessor frequencies() {
return frequencies;
}

/**
* Sets frequency accessor
* @param frequencies
*/
public void setFrequencies(FrequencyBaseAccessor frequencies) {
this.frequencies = frequencies;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@
import com.mx.path.model.mdx.model.origination.Origination;
import com.mx.path.model.mdx.model.p2p_transfer.Duration;
import com.mx.path.model.mdx.model.p2p_transfer.P2PTransfer;
import com.mx.path.model.mdx.model.p2p_transfer.RecurringP2PTransfer;
import com.mx.path.model.mdx.model.payment.Bill;
import com.mx.path.model.mdx.model.payment.Enrollment;
import com.mx.path.model.mdx.model.payment.Merchant;
Expand Down Expand Up @@ -397,6 +398,10 @@ private static void registerP2PTransferModels(GsonBuilder builder) {
builder.registerTypeAdapter(P2PTransfer.class, new ModelWrappableSerializer("p2p_transfer"));
builder.registerTypeAdapter(new TypeToken<MdxList<P2PTransfer>>() {
}.getType(), new ModelWrappableSerializer("p2p_transfers"));
// Recurring P2P Transfers
builder.registerTypeAdapter(RecurringP2PTransfer.class, new ModelWrappableSerializer("recurring_p2p_transfer"));
builder.registerTypeAdapter(new TypeToken<MdxList<RecurringP2PTransfer>>() {
}.getType(), new ModelWrappableSerializer("recurring_p2p_transfers"));
}

private static void registerPaymentsModels(GsonBuilder builder) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.mx.path.model.mdx.model.p2p_transfer;

import java.math.BigDecimal;
import java.time.LocalDate;

import lombok.Data;
import lombok.EqualsAndHashCode;

import com.mx.path.model.mdx.model.MdxBase;

@Data
@EqualsAndHashCode(callSuper = true)
public class RecurringP2PTransfer extends MdxBase<RecurringP2PTransfer> {
private String id;
private String accountId;
private BigDecimal amount;
private String confirmationId;
private String deliveryMethod;
private String durationType;
private String durationValue;
private String frequencyId;
private String memo;
private String recipientId;
private String recipientVerificationAnswer;
private String recipientVerificationQuestion;
private LocalDate startOn;
private String status;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
@RestController
@RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA)
public class P2PTransferDurationsController extends BaseController {
@RequestMapping(value = "/users/{userId}/p2p_transfers/durations", method = RequestMethod.GET)
@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers/durations", method = RequestMethod.GET)
public final ResponseEntity<MdxList<Duration>> list() {
AccessorResponse<MdxList<Duration>> response = gateway().p2pTransfers().durations().list();
AccessorResponse<MdxList<Duration>> response = gateway().p2pTransfers().recurring().durations().list();
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
@RestController
@RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA)
public class P2PTransferFrequenciesController extends BaseController {
@RequestMapping(value = "/users/{userId}/p2p_transfers/frequencies", method = RequestMethod.GET)
@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers/frequencies", method = RequestMethod.GET)
public final ResponseEntity<MdxList<Frequency>> list() {
AccessorResponse<MdxList<Frequency>> response = gateway().p2pTransfers().frequencies().list();
AccessorResponse<MdxList<Frequency>> response = gateway().p2pTransfers().recurring().frequencies().list();
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
package com.mx.path.model.mdx.web.controller;

import com.mx.path.gateway.accessor.AccessorResponse;
import com.mx.path.model.mdx.model.MdxList;
import com.mx.path.model.mdx.model.p2p_transfer.RecurringP2PTransfer;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping(value = "{clientId}", produces = BaseController.MDX_MEDIA)
public class RecurringP2PTransfersController extends BaseController {
@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers", method = RequestMethod.POST, consumes = BaseController.MDX_MEDIA)
public final ResponseEntity<RecurringP2PTransfer> create(@RequestBody RecurringP2PTransfer p2pTransferRequest) {
AccessorResponse<RecurringP2PTransfer> response = gateway().p2pTransfers().recurring().create(p2pTransferRequest);
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}

@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers/{id}", method = RequestMethod.DELETE)
public final ResponseEntity<?> delete(@PathVariable("id") String p2pTransferId) {
AccessorResponse<Void> response = gateway().p2pTransfers().recurring().delete(p2pTransferId);
return new ResponseEntity<>(createMultiMapForResponse(response.getHeaders()), HttpStatus.NO_CONTENT);
}

@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers/{id}", method = RequestMethod.GET)
public final ResponseEntity<RecurringP2PTransfer> get(@PathVariable("id") String p2pTransferId) {
AccessorResponse<RecurringP2PTransfer> response = gateway().p2pTransfers().recurring().get(p2pTransferId);
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}

@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers", method = RequestMethod.GET)
public final ResponseEntity<MdxList<RecurringP2PTransfer>> list() {
AccessorResponse<MdxList<RecurringP2PTransfer>> response = gateway().p2pTransfers().recurring().list();
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}

@RequestMapping(value = "/users/{userId}/recurring_p2p_transfers/{id}", method = RequestMethod.PUT, consumes = BaseController.MDX_MEDIA)
public final ResponseEntity<RecurringP2PTransfer> update(@PathVariable("id") String p2pTransferId, @RequestBody RecurringP2PTransfer p2pTransferRequest) {
AccessorResponse<RecurringP2PTransfer> response = gateway().p2pTransfers().recurring().update(p2pTransferId, p2pTransferRequest);
return new ResponseEntity<>(response.getResult().wrapped(), createMultiMapForResponse(response.getHeaders()), HttpStatus.OK);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.mx.path.gateway.accessor.AccessorResponse
import com.mx.path.gateway.api.Gateway
import com.mx.path.gateway.api.p2p_transfer.DurationGateway
import com.mx.path.gateway.api.p2p_transfer.P2PTransferGateway
import com.mx.path.gateway.api.p2p_transfer.RecurringP2PTransferGateway
import com.mx.path.model.mdx.model.MdxList
import com.mx.path.model.mdx.model.p2p_transfer.Duration

Expand All @@ -20,14 +21,17 @@ class P2PTransferDurationsControllerTest extends Specification {
P2PTransferDurationsController subject
Gateway gateway
P2PTransferGateway p2pTransferGateway
RecurringP2PTransferGateway recurringP2PTransferGateway
DurationGateway durationGateway

def setup() {
subject = new P2PTransferDurationsController()
p2pTransferGateway = mock(P2PTransferGateway)
recurringP2PTransferGateway = mock(RecurringP2PTransferGateway)
durationGateway = mock(DurationGateway)

doReturn(durationGateway).when(p2pTransferGateway).durations()
doReturn(recurringP2PTransferGateway).when(p2pTransferGateway).recurring()
doReturn(durationGateway).when(recurringP2PTransferGateway).durations()
gateway = spy(Gateway.builder().clientId("client-1234").p2pTransfers(p2pTransferGateway).build())
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.mx.path.gateway.accessor.AccessorResponse
import com.mx.path.gateway.api.Gateway
import com.mx.path.gateway.api.p2p_transfer.FrequencyGateway
import com.mx.path.gateway.api.p2p_transfer.P2PTransferGateway
import com.mx.path.gateway.api.p2p_transfer.RecurringP2PTransferGateway
import com.mx.path.model.mdx.model.Frequency
import com.mx.path.model.mdx.model.MdxList

Expand All @@ -20,14 +21,17 @@ class P2PTransferFrequenciesControllerTest extends Specification {
P2PTransferFrequenciesController subject
Gateway gateway
P2PTransferGateway p2pTransferGateway
RecurringP2PTransferGateway recurringP2PTransferGateway
FrequencyGateway frequencyGateway

def setup() {
subject = new P2PTransferFrequenciesController()
p2pTransferGateway = mock(P2PTransferGateway)
recurringP2PTransferGateway = mock(RecurringP2PTransferGateway)
frequencyGateway = mock(FrequencyGateway)

doReturn(frequencyGateway).when(p2pTransferGateway).frequencies()
doReturn(recurringP2PTransferGateway).when(p2pTransferGateway).recurring()
doReturn(frequencyGateway).when(recurringP2PTransferGateway).frequencies()
gateway = spy(Gateway.builder().clientId("client-1234").p2pTransfers(p2pTransferGateway).build())
}

Expand Down
Loading