All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.banxa.service.BanxaServiceImpl Maven / Gradle / Ivy

There is a newer version: 1.2.0
Show newest version
package com.banxa.service;

import com.banxa.client.BanxaClient;
import com.banxa.model.request.*;
import com.banxa.model.response.*;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

import java.util.Locale;

/**
 *
 */
public class BanxaServiceImpl implements BanxaService {

    private final BanxaClient banxaClient;

    public BanxaServiceImpl(BanxaClient banxaClient) {
        this.banxaClient = banxaClient;
    }

    /**
     *
     * @param request
     * @return
     */
    @Override
    public BanxaResponse getFiatCurrencies(GetFiatCurrenciesRequest request) {
        return request(request, GetFiatCurrenciesResponse.class);
    }

    @Override
    public BanxaResponse getCryptoCurrencies(GetCryptoCurrenciesRequest request) {
        return request(request, GetCryptoCurrenciesResponse.class);
    }

    @Override
    public BanxaResponse getCountries(GetCountriesRequest request) {
        return request(request, GetCountriesResponse.class);
    }

    @Override
    public BanxaResponse getUsStates(GetUsStatesRequest request) {
        return request(request, GetUsStatesResponse.class);
    }

    @Override
    public BanxaResponse getPaymentMethods(GetPaymentMethodsRequest request) {
        return request(request, GetPaymentMethodsResponse.class);
    }

    @Override
    public BanxaResponse getPrices(GetPricesRequest request) {
        return request(request, GetPricesResponse.class);
    }

    @Override
    public BanxaResponse getOrder(GetOrderRequest request) {
        return request(request, GetOrderResponse.class);
    }

    @Override
    public BanxaResponse getOrders(GetOrdersRequest request) {
        return request(request, GetOrdersResponse.class);
    }

    @Override
    public BanxaResponse createBuyOrder(CreateBuyOrderRequest request) {
        return request(request, CreateBuyOrderResponse.class);
    }

    @Override
    public BanxaResponse createSellOrder(CreateSellOrderRequest request) {
        return request(request, CreateSellOrderResponse.class);
    }

    @Override
    public BanxaResponse createNftOrder(CreateNftOrderRequest request) {
        return request(request, CreateNftOrderResponse.class);
    }

    @Override
    public BanxaResponse confirmSellOrder(ConfirmSellOrderRequest request) {
        return request(request, ConfirmSellOrderResponse.class);
    }

    @Override
    public BanxaResponse createIdentity(CreateIdentityRequest request) {
        return request(request, CreateIdentityResponse.class);
    }

    private  BanxaResponse request(Request request, Class responseClass) {
        try {
            String payload = request.getPayload();
            String uri = request.getUri();

            String response = banxaClient.request(request.getMethod(), uri, payload);

            System.out.println(response); // TODO Remove

            return buildResponse(responseClass, response);
        } catch (Exception e) {
            e.printStackTrace();
            return new BanxaResponse<>(false, null, null);
        }
    }

    private static  BanxaResponse buildResponse(Class responseClass, String response) throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        mapper.setLocale(Locale.US);
        mapper.registerModule(new JavaTimeModule());
        mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

        // To ensure this can be converted from JSON properly we need to strip out the data and meta nodes
        JsonNode root = mapper.readTree(response);
        String content = mapper.writeValueAsString(root.findValue("data"));

        JsonNode metaNode = root.findValue("meta");
        Pagination pagination = null;
        if (metaNode != null) {
            String metaText = mapper.writeValueAsString(metaNode);
            pagination = mapper.readValue(metaText, Pagination.class);
        }

        return new BanxaResponse<>(true, mapper.readValue(content, responseClass), pagination);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy