diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/PaymentRequestActivationRequest.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/PaymentRequestActivationRequest.java new file mode 100644 index 00000000..6754f91f --- /dev/null +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/PaymentRequestActivationRequest.java @@ -0,0 +1,23 @@ +package com.ibanity.apis.client.products.ponto_connect.models; + +import java.util.UUID; + +import com.ibanity.apis.client.models.IbanityModel; + +import lombok.*; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor(access = AccessLevel.PRIVATE) +public class PaymentRequestActivationRequest implements IbanityModel { + + public static final String RESOURCE_TYPE = "paymentRequestActivationRequest"; + public static final String API_URL_TAG_ID = "{" + RESOURCE_TYPE + URL_PARAMETER_ID_POSTFIX + "}"; + + private UUID id; + private String selfLink; + private String requestId; + + private String redirectLink; +} diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/create/PaymentRequestActivationRequestCreateQuery.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/create/PaymentRequestActivationRequestCreateQuery.java new file mode 100644 index 00000000..8920f687 --- /dev/null +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/models/create/PaymentRequestActivationRequestCreateQuery.java @@ -0,0 +1,24 @@ +package com.ibanity.apis.client.products.ponto_connect.models.create; + +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.ToString; + +import java.util.Map; + +import static java.util.Collections.emptyMap; + +@Getter +@Builder +@ToString +@EqualsAndHashCode +public class PaymentRequestActivationRequestCreateQuery { + + private String accessToken; + private String redirectUri; + + @Builder.Default + private Map additionalHeaders = emptyMap(); + +} diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PaymentRequestActivationRequestService.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PaymentRequestActivationRequestService.java new file mode 100644 index 00000000..bb896cbf --- /dev/null +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PaymentRequestActivationRequestService.java @@ -0,0 +1,10 @@ +package com.ibanity.apis.client.products.ponto_connect.services; + +import com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest; +import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery; + +public interface PaymentRequestActivationRequestService { + + PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery); + +} diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PontoConnectService.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PontoConnectService.java index 1be29661..39085cf2 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PontoConnectService.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/PontoConnectService.java @@ -34,6 +34,8 @@ public interface PontoConnectService { PaymentActivationRequestService paymentActivationRequestService(); + PaymentRequestActivationRequestService paymentRequestActivationRequestService(); + IntegrationAccountService integrationAccountService(); PaymentRequestService paymentRequestService(); diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PaymentRequestActivationRequestServiceImpl.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PaymentRequestActivationRequestServiceImpl.java new file mode 100644 index 00000000..c88fc033 --- /dev/null +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PaymentRequestActivationRequestServiceImpl.java @@ -0,0 +1,77 @@ +package com.ibanity.apis.client.products.ponto_connect.services.impl; + +import static com.ibanity.apis.client.mappers.IbanityModelMapper.toIbanityModel; +import static com.ibanity.apis.client.mappers.IbanityModelMapper.mapResource; +import static com.ibanity.apis.client.mappers.ModelMapperHelper.buildRequest; +import static com.ibanity.apis.client.models.IbanityProduct.PontoConnect; +import static com.ibanity.apis.client.utils.URIHelper.buildUri; + +import java.net.URI; +import java.util.function.Function; + +import org.apache.commons.lang3.StringUtils; +import org.apache.http.HttpResponse; + +import com.ibanity.apis.client.http.IbanityHttpClient; +import com.ibanity.apis.client.jsonapi.DataApiModel; +import com.ibanity.apis.client.jsonapi.RequestApiModel; +import com.ibanity.apis.client.products.ponto_connect.models.create.PaymentRequestActivationRequestCreateQuery; +import com.ibanity.apis.client.products.ponto_connect.services.PaymentRequestActivationRequestService; +import com.ibanity.apis.client.services.ApiUrlProvider; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +public class PaymentRequestActivationRequestServiceImpl implements PaymentRequestActivationRequestService { + + private final ApiUrlProvider apiUrlProvider; + private final IbanityHttpClient ibanityHttpClient; + + public PaymentRequestActivationRequestServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient ibanityHttpClient) { + this.apiUrlProvider = apiUrlProvider; + this.ibanityHttpClient = ibanityHttpClient; + } + + @Override + public com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest create(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) { + URI uri = buildUri(getUrl()); + + RequestApiModel requestApiModel = buildRequest(PaymentRequestActivationRequest.RESOURCE_TYPE, toRequest(paymentRequestActivationRequestCreateQuery)); + HttpResponse response = ibanityHttpClient.post(uri, requestApiModel, paymentRequestActivationRequestCreateQuery.getAdditionalHeaders(), paymentRequestActivationRequestCreateQuery.getAccessToken()); + + return mapResource(response, customMapping()); + } + + private PaymentRequestActivationRequest toRequest(PaymentRequestActivationRequestCreateQuery paymentRequestActivationRequestCreateQuery) { + return PaymentRequestActivationRequest.builder() + .redirectUri(paymentRequestActivationRequestCreateQuery.getRedirectUri()) + .build(); + } + + private Function customMapping() { + return dataApiModel -> { + com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest paymentRequestActivationRequest = toIbanityModel(dataApiModel, com.ibanity.apis.client.products.ponto_connect.models.PaymentRequestActivationRequest.class); + paymentRequestActivationRequest.setRedirectLink(dataApiModel.getLinks().getRedirect()); + + return paymentRequestActivationRequest; + }; + } + + private String getUrl() { + return StringUtils.removeEnd(apiUrlProvider.find(PontoConnect, "paymentRequestActivationRequests"), "/"); + } + + @Data + @Builder + @NoArgsConstructor + @AllArgsConstructor(access = AccessLevel.PRIVATE) + private static class PaymentRequestActivationRequest { + public static final String RESOURCE_TYPE = "paymentRequestActivationRequest"; + + private String redirectUri; + } + +} diff --git a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PontoConnectServiceImpl.java b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PontoConnectServiceImpl.java index 3ffc1274..e498a021 100644 --- a/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PontoConnectServiceImpl.java +++ b/src/main/java/com/ibanity/apis/client/products/ponto_connect/services/impl/PontoConnectServiceImpl.java @@ -24,6 +24,7 @@ public class PontoConnectServiceImpl implements PontoConnectService { private final BulkPaymentService bulkPaymentService; private final ReauthorizationRequestService reauthorizationRequestService; private final PaymentActivationRequestService paymentActivationRequestService; + private final PaymentRequestActivationRequestService paymentRequestActivationRequestService; private final IntegrationAccountService integrationAccountService; private final PaymentRequestService paymentRequestService; @@ -43,6 +44,7 @@ public PontoConnectServiceImpl(ApiUrlProvider apiUrlProvider, IbanityHttpClient bulkPaymentService = new BulkPaymentServiceImpl(apiUrlProvider, ibanityHttpClient); reauthorizationRequestService = new ReauthorizationRequestServiceImpl(apiUrlProvider, ibanityHttpClient); paymentActivationRequestService = new PaymentActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient); + paymentRequestActivationRequestService = new PaymentRequestActivationRequestServiceImpl(apiUrlProvider, ibanityHttpClient); integrationAccountService = new IntegrationAccountServiceImpl(apiUrlProvider, ibanityHttpClient); paymentRequestService = new PaymentRequestServiceImpl(apiUrlProvider, ibanityHttpClient); } @@ -118,7 +120,14 @@ public ReauthorizationRequestService reauthorizationRequestService() { } @Override - public PaymentActivationRequestService paymentActivationRequestService() { return paymentActivationRequestService;} + public PaymentActivationRequestService paymentActivationRequestService() { + return paymentActivationRequestService; + } + + @Override + public PaymentRequestActivationRequestService paymentRequestActivationRequestService() { + return paymentRequestActivationRequestService; + } @Override public IntegrationAccountService integrationAccountService() {